Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
Tomasz Sowa | dc56087444 | |
Tomasz Sowa | eda79cdbe6 |
94
CHANGELOG
94
CHANGELOG
|
@ -1,96 +1,6 @@
|
|||
Version 0.9.3 (2011.06.04):
|
||||
* added: German translation made by
|
||||
Moritz Beleites <morbel at gmx.net>
|
||||
* added: on display tab: an option how many digits should be grouped
|
||||
* changed: the way how buttons on display tab work
|
||||
suppose we have "123+34+56" in the first edit, then select
|
||||
(by mouse or a keyboard) "123+34" similar as you would like
|
||||
to copy them to the clipboard, then press a button let we say
|
||||
"sin" - the result is: "sin(123+34)+56"
|
||||
* updated: Chinese translation
|
||||
* fixed: ttcalc didn't correctly delete variables/functions from its config file
|
||||
so when you restarted the program you still had the deleted variables/functions
|
||||
* fixed: option: "parameters separated by" was not correctly read from the config file
|
||||
|
||||
|
||||
Version 0.9.2 (2010.09.24):
|
||||
* added: Italian translation made by
|
||||
Damiano Monaco <dmonax at gmail.com>
|
||||
* added: menu: edit->swap (ctrl+W)
|
||||
swapping the input for the output edit
|
||||
|
||||
Changes from TTMath 0.9.2 relating to TTCalc:
|
||||
* fixed: Big::Add() sometimes incorrectly rounded the last bit from its mantissa
|
||||
* fixed: Big::ToString method
|
||||
in some cases when in the output string the exponent should be equal zero
|
||||
the method changes the exponent to one so the last digit from the mantissa
|
||||
was lost
|
||||
|
||||
|
||||
Version 0.9.1 (2010.02.07):
|
||||
* fixed: the pad window didn't take into account following options (from display tab):
|
||||
grouping, input commas and parameter separators
|
||||
* updated: Chinese translation
|
||||
|
||||
Changes from TTMath 0.9.1 relating to TTCalc:
|
||||
* fixed: the parser didn't use characters for changing the base (# and &)
|
||||
those characters were skipped
|
||||
(this bug was introduced in 0.9.0)
|
||||
* fixed: added in the parser: operator's associativity
|
||||
operator ^ (powering) is right-associative:
|
||||
sample: 2^3^4 is equal 2^(3^4) and it is: 2.41e+24
|
||||
previously was: 2^3^4 = (2^3)^4 = 4096
|
||||
* changed: in Big::ToString() the base rounding is made only if the result value
|
||||
would not be an integer, e.g. if the value is 1.999999999999 then
|
||||
the base rounding will not be done - because as the result would be 2
|
||||
* added: IEEE 754 half-to-even rounding (bankers' rounding) to the following
|
||||
floating point algorithms: Big::Add, Big::Sub, Big::Mul, Big::Div
|
||||
|
||||
|
||||
Version 0.9.0 (2009.11.25):
|
||||
* fixed: when 'C' button was pressed, the cursor was not placed in the edit window
|
||||
* added: Pad window - a multiline edit window
|
||||
* added: Checking for update dialog box
|
||||
also the program can check automatically for an update at startup
|
||||
* added: there are some new buttons on the standard tab
|
||||
- (...) - the whole expression is surrounded by brackets (ctrl+0 short cut)
|
||||
- 1/(...)
|
||||
- ;
|
||||
- % - a new percentage operator
|
||||
- floor/ceil/min/max/sqrt/root/gamma
|
||||
* added: some new options on display tab:
|
||||
- grouping
|
||||
- input decimal point
|
||||
- parameters separated by
|
||||
* changed: precision:
|
||||
Medium - 512 bits mantissa, 64 bits exponent
|
||||
Big - 1024 bits mantissa, 128 bits exponent
|
||||
|
||||
Changes from TTMath 0.9.0 relating to TTCalc:
|
||||
* added: operator percentage
|
||||
e.g. 1000-50% = 1000-(1000*0,5) = 500
|
||||
* added: function frac(x) - returns a value without the integer part
|
||||
(only fraction remains)
|
||||
* changed: algorithms in sqrt(x) and root(x ; n)
|
||||
they were not too much accurate for some integers
|
||||
e.g. Root(16;4) returned a value very closed to 2 but not exactly 2
|
||||
* changed: added specializations to Big::ToString() when the base is equal 4, 8 or 16
|
||||
the previous version was not accurate on some last digits (after the comma operator)
|
||||
consider this binary value (32 bit mantissa):
|
||||
base 2: 1.1111 1111 1111 1111 1111 1111 1110 101
|
||||
previous ToString() gave:
|
||||
base 4: 1.33333333333332
|
||||
base 8: 1.777777777
|
||||
base 16: 1.FFFFFF
|
||||
now we have:
|
||||
base 4: 1.3333333333333222
|
||||
base 8: 1.77777777724
|
||||
base 16: 1.FFFFFFEA
|
||||
|
||||
|
||||
Version 0.8.7 prerelease (2009.09.16):
|
||||
Version 0.8.7 (2009.09.16):
|
||||
* added: new language: Swedish
|
||||
translation made by: Lars 'Bafvert' Gafvert <lars.gafvert at gmail dot com>
|
||||
translation made by: Lars 'Bäfvert' Gäfvert <lars.gafvert at gmail dot com>
|
||||
* changed: version of the TTMath library: 0.9.0 prerelease now
|
||||
|
||||
Changes from TTMath 0.9.0 prerelease relating to TTCalc:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Copyright (c) 2006-2011, Tomasz Sowa
|
||||
Copyright (c) 2006-2009, Tomasz Sowa
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
|
5
README
5
README
|
@ -17,8 +17,7 @@ display values with the base (radix) from two to sixteen.
|
|||
Author: Tomasz Sowa
|
||||
Contact: t.sowa@ttmath.org
|
||||
Licence: BSD (open source)
|
||||
Interface: English, Polish, Spanish, Danish, Chinese, Russian,
|
||||
Swedish, Italian, German
|
||||
Interface: English, Polish, Spanish, Danish, Chinese, Russian, Swedish
|
||||
Project page: http://ttcalc.sourceforge.net/
|
||||
Bignum library: TTMath http://www.ttmath.org/
|
||||
Operating systems: Microsoft Windows 9x/Me/NT/2000/XP/Vista/7
|
||||
Operating systems: Microsoft Windows 9x/Me/NT/2000/XP/Vista
|
||||
|
|
|
@ -28,7 +28,7 @@ performed on an approximate value and the result is only an approximation too.
|
|||
|
||||
<p>
|
||||
For example try to calculate: 0.204 - 0.34*0.80 + 0.068, you would expect that the
|
||||
result was 0 but TTCalc gives you: 3.15544362088404722164691426e-30 which is
|
||||
result would be: 0 but TTCalc gives you: 3.15544362088404722164691426e-30 which is
|
||||
a good approximation to the real zero (look at e-30 part which means 10^(-30)).
|
||||
</p>
|
||||
|
||||
|
|
|
@ -91,7 +91,6 @@
|
|||
<li><a href="rounding_functions.html">round(x)</a></li>
|
||||
<li><a href="rounding_functions.html">ceil(x)</a></li>
|
||||
<li><a href="rounding_functions.html">floor(x)</a></li>
|
||||
<li><a href="rounding_functions.html">frac(x)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
@ -100,8 +99,7 @@
|
|||
<ul>
|
||||
<li><a href="other_functions.html">sqrt(x)</a></li>
|
||||
<li><a href="other_functions.html">root(x ; n)</a></li>
|
||||
<li><a href="other_functions.html">factorial(n)</a></li>
|
||||
<li><a href="other_functions.html">gamma(x)</a></li>
|
||||
<li><a href="other_functions.html">factorial(x)</a></li>
|
||||
<li><a href="other_functions.html">abs(x)</a></li>
|
||||
<li><a href="other_functions.html">sgn(x)</a></li>
|
||||
<li><a href="other_functions.html">mod(x; y)</a></li>
|
||||
|
|
|
@ -33,9 +33,9 @@ variables and functions.
|
|||
<p>
|
||||
The program possesses an easy to use interface. Calculations are performed
|
||||
by using binary floating point numbers with three kinds of precision,
|
||||
the biggest has 1024 bits for its mantissa and 128 bits for its exponent
|
||||
that is about 9.80518... * 10^51217599719369681875006054625051616657
|
||||
with 306 valid decimal digits. TTCalc independently allows to insert and
|
||||
the biggest has 864 bits for its mantissa and 128 bits for its exponent
|
||||
that is about 6.70897699... * 10^51217599719369681875006054625051616609
|
||||
with 258 valid decimal digits. TTCalc independently allows to insert and
|
||||
display values with the base (radix) from two to sixteen.
|
||||
</p>
|
||||
|
||||
|
@ -44,10 +44,10 @@ display values with the base (radix) from two to sixteen.
|
|||
<tr><td>Author:</td><td>Tomasz Sowa</td></tr>
|
||||
<tr><td>Contact:</td><td>t.sowa@ttmath.org</td></tr>
|
||||
<tr><td>Licence:</td><td>BSD (open source)</td></tr>
|
||||
<tr><td>Interface:</td><td>English, Polish, Spanish, Danish, Chinese, Russian, Swedish, Italian, German</td></tr>
|
||||
<tr><td>Interface:</td><td>English, Polish, Spanish, Danish, Chinese, Russian, Swedish</td></tr>
|
||||
<tr><td>Project page:</td><td><a href="http://ttcalc.sourceforge.net/">http://ttcalc.sourceforge.net/</a></td></tr>
|
||||
<tr><td>Bignum library:</td><td>TTMath <a href="http://ttmath.org/">http://www.ttmath.org/</a></td></tr>
|
||||
<tr><td>Operating systems:</td><td>Microsoft Windows 9x/Me/NT/2000/XP/Vista/7</td></tr>
|
||||
<tr><td>Operating systems:</td><td>Microsoft Windows 9x/Me/NT/2000/XP/Vista</td></tr>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
|
|
|
@ -21,8 +21,7 @@
|
|||
<tr><td>Operator</td><td>Description</td><td>Sample</td></tr>
|
||||
</thead>
|
||||
<tr><td>( )</td><td>parentheses for grouping an expression</td><td>(1+3)*4</td></tr>
|
||||
<tr><td>- + # &</td><td>unary minus and plus, and operators for changing the base (radix)</td><td>-10<br>&1111 (bin)<br>#ff (hex)</td></tr>
|
||||
<tr><td>%</td><td>percentage from a previous value</td><td>100-30%</td></tr>
|
||||
<tr><td>- + # &</td><td>unary minus and plus, and operators for changing the base (radix)</td><td>-10</td></tr>
|
||||
<tr><td>^</td><td>powering</td><td>3^2</td></tr>
|
||||
<tr><td>* /</td><td>multiplication and division</td><td>10*20</td></tr>
|
||||
<tr><td>without an operator</td><td>short form of multiplication<br>(only if the second argument is a variable or function,<br>the same priority as a normal multiplication)</td><td>3y</td></tr>
|
||||
|
|
|
@ -62,13 +62,13 @@ sgn(5)=1</dd>
|
|||
|
||||
|
||||
<dt>max(x1; x2; ...)</dt>
|
||||
<dd>This functions takes any number of arguments. It returns the max value of them. If there are not any arguments
|
||||
<dd>This functions takes any number of arguments. It returns the max value of them. If there aren't arguments
|
||||
the function returns the max value which can be held in this precision.<br>
|
||||
max(2;5;8;3)=8<br>
|
||||
max()=6.97846825730330952352039893e+646457021 (assuming the small precision is selected)</dd>
|
||||
|
||||
<dt>min(x1; x2; ...)</dt>
|
||||
<dd>This functions takes any number of arguments. It returns the min value of them. If there are not any arguments
|
||||
<dd>This functions takes any number of arguments. It returns the min value of them. If there aren't arguments
|
||||
the function returns the min value which can be held in this precision.<br>
|
||||
min(45;-23;18;19)=-23<br>
|
||||
min()=-6.97846825730330952352039893e+646457021 (assuming the small precision is selected)
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
<param name="Keyword" value="round">
|
||||
<param name="Keyword" value="ceil">
|
||||
<param name="Keyword" value="floor">
|
||||
<param name="Keyword" value="frac">
|
||||
</object>
|
||||
</head>
|
||||
|
||||
|
@ -58,11 +57,6 @@ floor(2)=2<br>
|
|||
floor(-4.1)=-5<br>
|
||||
floor(-4.8)=-5</dd>
|
||||
|
||||
<dt>frac(x)</dt>
|
||||
<dd>This function returns a value without the integer part - only fraction remains<br>
|
||||
frac(45.789)=0.789<br>
|
||||
frac(-2.267)=-0.267<br>
|
||||
|
||||
</dl>
|
||||
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
<param name="Keyword" value="#">
|
||||
<param name="Keyword" value="&">
|
||||
<param name="Keyword" value="global semicolon">
|
||||
<param name="Keyword" value="CTRL+C">
|
||||
<param name="Keyword" value="CTRL+V">
|
||||
</object>
|
||||
</head>
|
||||
|
||||
|
@ -33,7 +35,18 @@ then 'input' mode on the 'display' tab is ignored.
|
|||
|
||||
<li>
|
||||
You can calculate more than one formula at the same time. To achive this use a semicolon
|
||||
in the global space, for example type '2+4 ; 5*10' and the result will be '6 ; 50'.
|
||||
in the global space, for example type '2+4 ; 5*10' and the result will be '6 50'.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
You can use CTRL+C to copy the result from the output edit into the clipboard
|
||||
(if a control which has a focus is not an edit control, or if it is an edit but
|
||||
has no selection)
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Also you can use CTRL+V to paste a text from the clipboard into the input control
|
||||
(if a control which has a focus is not an edit control)
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
|
|
@ -3,14 +3,16 @@
|
|||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<title>TTCalc - standard operators and built-in variables</title>
|
||||
<title>TTCalc - numbers, standard operators and built-in variables</title>
|
||||
<link rel="stylesheet" href="styles.css" type="text/css">
|
||||
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
||||
<param name="Keyword" value="numbers">
|
||||
<param name="Keyword" value="comma">
|
||||
<param name="Keyword" value="dot">
|
||||
<param name="Keyword" value="standard operators">
|
||||
<param name="Keyword" value="builtin variables">
|
||||
<param name="Keyword" value="e">
|
||||
<param name="Keyword" value="pi">
|
||||
<param name="Keyword" value="%">
|
||||
<param name="Keyword" value="^">
|
||||
<param name="Keyword" value="*">
|
||||
<param name="Keyword" value="/">
|
||||
|
@ -23,34 +25,39 @@
|
|||
|
||||
<body>
|
||||
|
||||
<h1>Numbers</h1>
|
||||
|
||||
<p>
|
||||
You can type numbers directly using your keyboard or insert them by a mouse. This is a simple edit window,
|
||||
you can use arrow keys etc. and copy&paste text by using standard shortcuts such as CTRL+C and CTRL+V.
|
||||
Decimal point can be either a comma or a dot that means 1,234 is the same as 1.234.
|
||||
</p>
|
||||
|
||||
<h1>Standard operators</h1>
|
||||
|
||||
<dl>
|
||||
<dt>%</dt>
|
||||
<dd>Percentage from a previous value: 1000-30% = 700</dd>
|
||||
|
||||
<dt>^</dt>
|
||||
<dd>Powering: 2^3 = 8</dd>
|
||||
<dd>Powering, e.g.: 2^3=8</dd>
|
||||
|
||||
<dt>*</dt>
|
||||
<dd>Multiplication: 2*3 = 6</dd>
|
||||
<dd>Multiplication, e.g.: 2*3=6</dd>
|
||||
|
||||
<dt>/</dt>
|
||||
<dd>Division: 2/3 = 0.6666...</dd>
|
||||
<dd>Division, e.g.: 2/3 = 0.6666...</dd>
|
||||
|
||||
<dt>+</dt>
|
||||
<dd>Addition: 2+3 = 5<br>
|
||||
Unary plus: +2</dd>
|
||||
<dd>Addition, e.g.: 2+3=5<br>
|
||||
Unary plus, e.g.: +2</dd>
|
||||
|
||||
<dt>-</dt>
|
||||
<dd>Subtraction: 2-3 = -1<br>
|
||||
Unary minus: -2</dd>
|
||||
<dd>Subtraction, e.g.: 2-3=-1<br>
|
||||
Unary minus, e.g.: -2</dd>
|
||||
|
||||
<dt>#</dt>
|
||||
<dd>Operator for changing the base (radix) to 16 (hex): #ff = 255</dd>
|
||||
<dd>Operator for changing the base (radix) to 16 (hex), e.g.: #ff=255</dd>
|
||||
|
||||
<dt>&</dt>
|
||||
<dd>Operator for changing the base (radix) to 2 (bin): -&110 = -6</dd>
|
||||
<dd>Operator for changing the base (radix) to 2 (bin), e.g.: -&110=-6</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
|
|
268
makerelease.sh
268
makerelease.sh
|
@ -1,268 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
a=""
|
||||
b=""
|
||||
c=""
|
||||
p=""
|
||||
d=""
|
||||
|
||||
# reading until not empty
|
||||
|
||||
while [ -z $a ]
|
||||
do
|
||||
echo -n "Major: " ; read a
|
||||
done
|
||||
|
||||
|
||||
while [ -z $b ]
|
||||
do
|
||||
echo -n "Minor: " ; read b;
|
||||
done
|
||||
|
||||
|
||||
while [ -z $c ]
|
||||
do
|
||||
echo -n "Revision: " ; read c;
|
||||
done
|
||||
|
||||
|
||||
while [ -z $p ]
|
||||
do
|
||||
echo -n "Prerelease? (y/n): " ; read p;
|
||||
done
|
||||
|
||||
|
||||
while [ -z $d ]
|
||||
do
|
||||
echo -n "Add date? (y/n): " ; read d;
|
||||
done
|
||||
|
||||
|
||||
dir=$a.$b.$c
|
||||
datestr=""
|
||||
|
||||
|
||||
if [ $p = "y" -o $p = "Y" ]
|
||||
then
|
||||
dir=$dir.prerelease
|
||||
fi
|
||||
|
||||
|
||||
if [ $d = "y" -o $d = "Y" ]
|
||||
then
|
||||
datestr="("`/bin/date "+%G.%m.%d"`")";
|
||||
dir=$dir.$datestr
|
||||
fi
|
||||
|
||||
|
||||
if [ -d $dir ]
|
||||
then
|
||||
echo "Directory $dir exists! (exiting)";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
mkdir $dir
|
||||
|
||||
|
||||
echo "------------------------------------------------------"
|
||||
echo "compiling normal version"
|
||||
echo "------------------------------------------------------"
|
||||
|
||||
cd src
|
||||
make clean
|
||||
make
|
||||
|
||||
echo "------------------------------------------------------"
|
||||
echo "creating help"
|
||||
echo "------------------------------------------------------"
|
||||
|
||||
make help
|
||||
|
||||
|
||||
echo "------------------------------------------------------"
|
||||
echo "creating install program (setup)"
|
||||
echo "------------------------------------------------------"
|
||||
|
||||
make setup
|
||||
|
||||
|
||||
cd ../$dir
|
||||
|
||||
|
||||
|
||||
echo "------------------------------------------------------"
|
||||
echo "making binary package"
|
||||
echo "------------------------------------------------------"
|
||||
|
||||
n="ttcalc-$a.$b.$c";
|
||||
|
||||
if [ $p = "y" -o $p = "Y" ]
|
||||
then
|
||||
n="$n.prerelease"
|
||||
fi
|
||||
|
||||
if [ $d = "y" -o $d = "Y" ]
|
||||
then
|
||||
ntar="$n-bin.$datestr.zip";
|
||||
else
|
||||
ntar="$n-bin.zip";
|
||||
fi
|
||||
|
||||
mkdir $n
|
||||
cp ../help/ttcalc.chm $n
|
||||
cp ../src/ttcalc.exe $n
|
||||
cp ../COPYRIGHT $n
|
||||
cp ../README $n
|
||||
cp ../CHANGELOG $n
|
||||
#tar -zcf $ntar $n
|
||||
zip -r -9 $ntar $n
|
||||
rm -r $n
|
||||
|
||||
|
||||
|
||||
echo "------------------------------------------------------"
|
||||
echo "copying the setup program"
|
||||
echo "------------------------------------------------------"
|
||||
|
||||
n="ttcalc-$a.$b.$c"
|
||||
|
||||
if [ $p = "y" -o $p = "Y" ]
|
||||
then
|
||||
n="$n.prerelease"
|
||||
fi
|
||||
|
||||
if [ $d = "y" -o $d = "Y" ]
|
||||
then
|
||||
cp ../setup/ttcalc-setup.exe ./$n-setup.$datestr.exe
|
||||
else
|
||||
cp ../setup/ttcalc-setup.exe ./$n-setup.exe
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
echo "------------------------------------------------------"
|
||||
echo "compiling portable version"
|
||||
echo "------------------------------------------------------"
|
||||
|
||||
# preserve ttcalc.chm because would be erased by 'make clean'
|
||||
cp ../help/ttcalc.chm ./
|
||||
|
||||
cd ../src/
|
||||
make clean
|
||||
make -f Makefileportable
|
||||
|
||||
|
||||
cd ../$dir
|
||||
|
||||
|
||||
|
||||
echo "------------------------------------------------------"
|
||||
echo "making portable binary package"
|
||||
echo "------------------------------------------------------"
|
||||
|
||||
n="ttcalc-portable-$a.$b.$c";
|
||||
|
||||
if [ $p = "y" -o $p = "Y" ]
|
||||
then
|
||||
n="$n.prerelease"
|
||||
fi
|
||||
|
||||
if [ $d = "y" -o $d = "Y" ]
|
||||
then
|
||||
ntar="$n-bin.$datestr.zip";
|
||||
else
|
||||
ntar="$n-bin.zip";
|
||||
fi
|
||||
|
||||
mkdir $n
|
||||
cp ../src/ttcalcp.exe $n
|
||||
$n/ttcalcp.exe createconfig
|
||||
mv ttcalc.ini $n
|
||||
mv ttcalc.chm $n
|
||||
cp ../COPYRIGHT $n
|
||||
cp ../README $n
|
||||
cp ../CHANGELOG $n
|
||||
#tar -zcf $ntar $n
|
||||
zip -r -9 $ntar $n
|
||||
rm -r $n
|
||||
|
||||
|
||||
|
||||
echo "------------------------------------------------------"
|
||||
echo "creating source package"
|
||||
echo "------------------------------------------------------"
|
||||
|
||||
|
||||
n="ttcalc-$a.$b.$c";
|
||||
|
||||
|
||||
if [ $p = "y" -o $p = "Y" ]
|
||||
then
|
||||
n="$n.prerelease"
|
||||
fi
|
||||
|
||||
|
||||
if [ $d = "y" -o $d = "Y" ]
|
||||
then
|
||||
ntar="$n-src.$datestr.zip";
|
||||
else
|
||||
ntar="$n-src.zip";
|
||||
fi
|
||||
|
||||
|
||||
mkdir $n
|
||||
mkdir $n/ttmath
|
||||
mkdir $n/ttcalc
|
||||
|
||||
mkdir $n/ttmath/ttmath
|
||||
mkdir $n/ttmath/samples
|
||||
|
||||
mkdir $n/ttcalc/help
|
||||
mkdir $n/ttcalc/res
|
||||
mkdir $n/ttcalc/setup
|
||||
mkdir $n/ttcalc/src
|
||||
|
||||
cp ../../ttmath/ttmath/* $n/ttmath/ttmath
|
||||
cp ../../ttmath/samples/* $n/ttmath/samples
|
||||
cp ../../ttmath/COPYRIGHT $n/ttmath
|
||||
cp ../../ttmath/README $n/ttmath
|
||||
cp ../../ttmath/CHANGELOG $n/ttmath
|
||||
|
||||
cd ../src
|
||||
make clean
|
||||
cd ../$dir
|
||||
|
||||
cp ../help/* $n/ttcalc/help
|
||||
cp ../res/* $n/ttcalc/res
|
||||
cp ../setup/* $n/ttcalc/setup
|
||||
cp ../src/* $n/ttcalc/src
|
||||
cp ../COPYRIGHT $n/ttcalc
|
||||
cp ../README $n/ttcalc
|
||||
cp ../CHANGELOG $n/ttcalc
|
||||
|
||||
#tar -zcf $ntar $n
|
||||
zip -r -9 $ntar $n
|
||||
rm -r $n
|
||||
|
||||
|
||||
echo "------------------------------------------------------"
|
||||
echo "calculating md5 hashes"
|
||||
echo "------------------------------------------------------"
|
||||
|
||||
md5sum * > note.txt.md5
|
||||
echo "MD5 SUMS" > note.txt
|
||||
echo "--------" >> note.txt
|
||||
cat note.txt.md5 >> note.txt
|
||||
|
||||
echo "" >> note.txt
|
||||
echo "" >> note.txt
|
||||
echo "CHANGELOG" >> note.txt
|
||||
echo "---------" >> note.txt
|
||||
cat ../CHANGELOG >> note.txt
|
||||
|
||||
rm note.txt.md5
|
||||
unix2dos note.txt
|
||||
|
||||
echo "done"
|
||||
exit 0
|
Binary file not shown.
After Width: | Height: | Size: 143 KiB |
BIN
res/aboutbox.bmp
BIN
res/aboutbox.bmp
Binary file not shown.
Before Width: | Height: | Size: 227 KiB |
|
@ -1,4 +1,4 @@
|
|||
Copyright (c) 2006-2011, Tomasz Sowa
|
||||
Copyright (c) 2006-2009, Tomasz Sowa
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
; innosetup script
|
||||
; Script generated by the Inno Setup Script Wizard.
|
||||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||
|
||||
[Setup]
|
||||
AppName=TTCalc
|
||||
AppVerName=TTCalc 0.9.3
|
||||
AppVersion=0.9.3
|
||||
AppVerName=TTCalc 0.8.7
|
||||
AppVersion=0.8.7
|
||||
AppPublisher=Tomasz Sowa
|
||||
AppPublisherURL=http://ttcalc.sourceforge.net
|
||||
AppSupportURL=http://ttcalc.sourceforge.net
|
||||
|
@ -11,26 +12,23 @@ AppUpdatesURL=http://ttcalc.sourceforge.net
|
|||
DefaultDirName={pf}\TTCalc
|
||||
DefaultGroupName=TTCalc
|
||||
AllowNoIcons=yes
|
||||
; special COPYRIGHT version (without new line characters in the clause -- it is better displayed in the setup window)
|
||||
; special COPYRIGHT version (without a new line characters in the clause -- it is better displayed in the setup window)
|
||||
LicenseFile=COPYRIGHT
|
||||
OutputDir=..\setup
|
||||
OutputBaseFilename=ttcalc-setup
|
||||
Compression=lzma
|
||||
SolidCompression=yes
|
||||
ShowUndisplayableLanguages=yes
|
||||
PrivilegesRequired=admin
|
||||
UsePreviousAppDir=yes
|
||||
PrivilegesRequired=none
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
|
||||
Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl"
|
||||
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
|
||||
Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl"
|
||||
Name: "chinese"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
|
||||
Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl"
|
||||
Name: "chinese"; MessagesFile: "compiler:Languages\ChineseSimp-12-5.1.11.isl"
|
||||
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
|
||||
Name: "swedish"; MessagesFile: "compiler:Languages\Swedish.isl"
|
||||
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
|
||||
Name: "german"; MessagesFile: "compiler:Languages\German.isl"
|
||||
|
||||
[InstallDelete]
|
||||
; prior to 0.8.3 we were using mingwm10.dll (now it is not needed and will be deleted if exists)
|
||||
|
@ -41,22 +39,16 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{
|
|||
|
||||
[Files]
|
||||
Source: "..\src\ttcalc.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\help\ttcalc.chm"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\COPYRIGHT"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\CHANGELOG"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\README"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\help\ttcalc.chm"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\COPYRIGHT"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\CHANGELOG"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\README"; DestDir: "{app}"; Flags: ignoreversion
|
||||
; now we do not use *.ini file in the installer
|
||||
|
||||
[Dirs]
|
||||
Name: "{userappdata}/TTCalc" ; Flags: uninsneveruninstall
|
||||
|
||||
[INI]
|
||||
Filename: "{userappdata}/TTCalc/ttcalc.ini"; Section: "GLOBAL"; Key: "language.setup"; String: "{language}"
|
||||
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\TTCalc"; Filename: "{app}\ttcalc.exe"; WorkingDir: "{app}"
|
||||
Name: "{group}\Help"; Filename: "{app}\ttcalc.chm"; WorkingDir: "{app}"
|
||||
Name: "{group}\Help"; Filename: "{app}\ttcalc.chm"; WorkingDir: "{app}"
|
||||
Name: "{group}\{cm:UninstallProgram,TTCalc}"; Filename: "{uninstallexe}"
|
||||
Name: "{commondesktop}\TTCalc"; Filename: "{app}\ttcalc.exe"; WorkingDir: "{app}"; Tasks: desktopicon
|
||||
|
||||
|
|
35
src/Makefile
35
src/Makefile
|
@ -1,9 +1,6 @@
|
|||
include Makefile.o.dep
|
||||
include Makefile.help.dep
|
||||
|
||||
CC = g++
|
||||
#CFLAGS = -Wall -pedantic -s -O2 -mwindows -I../../ttmath -DTTCALC_CONVERT
|
||||
CFLAGS = -Wall -pedantic -s -O2 -mwindows -I../../ttmath -DTTMATH_DONT_USE_WCHAR
|
||||
CFLAGS = -Wall -pedantic -s -O2 -mwindows -I../../ttmath
|
||||
name = ttcalc.exe
|
||||
|
||||
# the name of the help is also set in the html help workshop project file
|
||||
|
@ -17,15 +14,11 @@ setupname = ttcalc-setup.exe
|
|||
all: ttcalc
|
||||
|
||||
|
||||
%.o: %.cpp
|
||||
$(CC) -c $(CFLAGS) $<
|
||||
include Makefile.dep
|
||||
|
||||
|
||||
ttcalc: $(name)
|
||||
|
||||
|
||||
$(name): $(o)
|
||||
$(CC) -o $(name) $(CFLAGS) $(o) -lcomctl32 -lwininet
|
||||
ttcalc: $(o)
|
||||
$(CC) -o $(name) $(CFLAGS) $(o) -lcomctl32
|
||||
|
||||
|
||||
resource.o: resource.rc
|
||||
|
@ -33,34 +26,18 @@ resource.o: resource.rc
|
|||
windres resource.rc resource.o
|
||||
|
||||
|
||||
help: ../help/$(helpname)
|
||||
|
||||
|
||||
../help/$(helpname): $(helpsrc)
|
||||
help: $(helpdep)
|
||||
Makefile.help.sh
|
||||
|
||||
|
||||
setup: ../setup/$(setupname)
|
||||
|
||||
|
||||
../setup/$(setupname): $(name) ../help/$(helpname) ../setup/innosetup.iss ../setup/COPYRIGHT ../COPYRIGHT ../CHANGELOG ../README
|
||||
setup: $(setupdep)
|
||||
iscc ../setup/innosetup.iss
|
||||
|
||||
|
||||
depend:
|
||||
makedepend -Y. -I../../ttmath -f- *.cpp | sed "s/[\\]/\//g" > Makefile.cpp.dep
|
||||
echo -n "o = resource.o " > Makefile.o.dep
|
||||
ls -1 *.cpp | xargs -I foo echo -n foo " " | sed -E "s/([^\.]*)\.cpp[ ]/\1\.o/g" >> Makefile.o.dep
|
||||
echo -n "helpsrc = " > Makefile.help.dep
|
||||
ls -1 ../help/*.html ../help/*.css ../help/*.hhp ../help/*.hhk ../help/*.hhc | xargs -I foo echo -n foo " " >> Makefile.help.dep
|
||||
|
||||
|
||||
clean:
|
||||
rm -f *.o
|
||||
rm -f $(name)
|
||||
rm -f ttcalcp.exe
|
||||
rm -f ../help/$(helpname)
|
||||
rm -f ../setup/$(setupname)
|
||||
|
||||
|
||||
include Makefile.cpp.dep
|
||||
|
|
|
@ -1,176 +0,0 @@
|
|||
# DO NOT DELETE
|
||||
|
||||
calculation.o: compileconfig.h parsermanager.h resource.h programresources.h
|
||||
calculation.o: iniparser.h languages.h bigtypes.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmath.h ../../ttmath/ttmath/ttmathbig.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmathint.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmathuint.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmathtypes.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmathmisc.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmathobjects.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmathparser.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmath.h threadcontroller.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmathobjects.h stopcalculating.h
|
||||
calculation.o: ../../ttmath/ttmath/ttmathtypes.h convert.h tabs.h messages.h
|
||||
convert.o: convert.h compileconfig.h bigtypes.h ../../ttmath/ttmath/ttmath.h
|
||||
convert.o: ../../ttmath/ttmath/ttmathbig.h ../../ttmath/ttmath/ttmathint.h
|
||||
convert.o: ../../ttmath/ttmath/ttmathuint.h ../../ttmath/ttmath/ttmathtypes.h
|
||||
convert.o: ../../ttmath/ttmath/ttmathmisc.h
|
||||
convert.o: ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
convert.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
convert.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
convert.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
convert.o: ../../ttmath/ttmath/ttmathobjects.h
|
||||
convert.o: ../../ttmath/ttmath/ttmathparser.h ../../ttmath/ttmath/ttmath.h
|
||||
download.o: compileconfig.h download.h
|
||||
functions.o: compileconfig.h tabs.h resource.h messages.h
|
||||
functions.o: ../../ttmath/ttmath/ttmathtypes.h programresources.h iniparser.h
|
||||
functions.o: languages.h bigtypes.h ../../ttmath/ttmath/ttmath.h
|
||||
functions.o: ../../ttmath/ttmath/ttmathbig.h ../../ttmath/ttmath/ttmathint.h
|
||||
functions.o: ../../ttmath/ttmath/ttmathuint.h
|
||||
functions.o: ../../ttmath/ttmath/ttmathtypes.h
|
||||
functions.o: ../../ttmath/ttmath/ttmathmisc.h
|
||||
functions.o: ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
functions.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
functions.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
functions.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
functions.o: ../../ttmath/ttmath/ttmathobjects.h
|
||||
functions.o: ../../ttmath/ttmath/ttmathparser.h ../../ttmath/ttmath/ttmath.h
|
||||
functions.o: threadcontroller.h ../../ttmath/ttmath/ttmathobjects.h
|
||||
functions.o: stopcalculating.h convert.h
|
||||
iniparser.o: compileconfig.h iniparser.h
|
||||
languages.o: compileconfig.h languages.h bigtypes.h
|
||||
languages.o: ../../ttmath/ttmath/ttmath.h ../../ttmath/ttmath/ttmathbig.h
|
||||
languages.o: ../../ttmath/ttmath/ttmathint.h ../../ttmath/ttmath/ttmathuint.h
|
||||
languages.o: ../../ttmath/ttmath/ttmathtypes.h
|
||||
languages.o: ../../ttmath/ttmath/ttmathmisc.h
|
||||
languages.o: ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
languages.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
languages.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
languages.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
languages.o: ../../ttmath/ttmath/ttmathobjects.h
|
||||
languages.o: ../../ttmath/ttmath/ttmathparser.h ../../ttmath/ttmath/ttmath.h
|
||||
mainwindow.o: compileconfig.h winmain.h programresources.h iniparser.h
|
||||
mainwindow.o: languages.h bigtypes.h ../../ttmath/ttmath/ttmath.h
|
||||
mainwindow.o: ../../ttmath/ttmath/ttmathbig.h ../../ttmath/ttmath/ttmathint.h
|
||||
mainwindow.o: ../../ttmath/ttmath/ttmathuint.h
|
||||
mainwindow.o: ../../ttmath/ttmath/ttmathtypes.h
|
||||
mainwindow.o: ../../ttmath/ttmath/ttmathmisc.h
|
||||
mainwindow.o: ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
mainwindow.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
mainwindow.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
mainwindow.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
mainwindow.o: ../../ttmath/ttmath/ttmathobjects.h
|
||||
mainwindow.o: ../../ttmath/ttmath/ttmathparser.h ../../ttmath/ttmath/ttmath.h
|
||||
mainwindow.o: threadcontroller.h ../../ttmath/ttmath/ttmathobjects.h
|
||||
mainwindow.o: stopcalculating.h ../../ttmath/ttmath/ttmathtypes.h convert.h
|
||||
mainwindow.o: resource.h messages.h tabs.h pad.h update.h download.h misc.h
|
||||
pad.o: ../../ttmath/ttmath/ttmath.h ../../ttmath/ttmath/ttmathbig.h
|
||||
pad.o: ../../ttmath/ttmath/ttmathint.h ../../ttmath/ttmath/ttmathuint.h
|
||||
pad.o: ../../ttmath/ttmath/ttmathtypes.h ../../ttmath/ttmath/ttmathmisc.h
|
||||
pad.o: ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
pad.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
pad.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
pad.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
pad.o: ../../ttmath/ttmath/ttmathobjects.h ../../ttmath/ttmath/ttmathparser.h
|
||||
pad.o: ../../ttmath/ttmath/ttmath.h programresources.h compileconfig.h
|
||||
pad.o: iniparser.h languages.h bigtypes.h threadcontroller.h
|
||||
pad.o: ../../ttmath/ttmath/ttmathobjects.h stopcalculating.h
|
||||
pad.o: ../../ttmath/ttmath/ttmathtypes.h convert.h resource.h messages.h
|
||||
pad.o: pad.h
|
||||
parsermanager.o: compileconfig.h parsermanager.h resource.h
|
||||
parsermanager.o: programresources.h iniparser.h languages.h bigtypes.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmath.h ../../ttmath/ttmath/ttmathbig.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmathint.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmathuint.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmathtypes.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmathmisc.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmathobjects.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmathparser.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmath.h threadcontroller.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmathobjects.h stopcalculating.h
|
||||
parsermanager.o: ../../ttmath/ttmath/ttmathtypes.h convert.h tabs.h
|
||||
parsermanager.o: messages.h
|
||||
programresources.o: compileconfig.h programresources.h iniparser.h
|
||||
programresources.o: languages.h bigtypes.h ../../ttmath/ttmath/ttmath.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathbig.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathint.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathuint.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathtypes.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathmisc.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathobjects.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathparser.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmath.h threadcontroller.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathobjects.h stopcalculating.h
|
||||
programresources.o: ../../ttmath/ttmath/ttmathtypes.h convert.h
|
||||
tabs.o: compileconfig.h tabs.h resource.h messages.h
|
||||
tabs.o: ../../ttmath/ttmath/ttmathtypes.h programresources.h iniparser.h
|
||||
tabs.o: languages.h bigtypes.h ../../ttmath/ttmath/ttmath.h
|
||||
tabs.o: ../../ttmath/ttmath/ttmathbig.h ../../ttmath/ttmath/ttmathint.h
|
||||
tabs.o: ../../ttmath/ttmath/ttmathuint.h ../../ttmath/ttmath/ttmathtypes.h
|
||||
tabs.o: ../../ttmath/ttmath/ttmathmisc.h ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
tabs.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
tabs.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
tabs.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
tabs.o: ../../ttmath/ttmath/ttmathobjects.h
|
||||
tabs.o: ../../ttmath/ttmath/ttmathparser.h ../../ttmath/ttmath/ttmath.h
|
||||
tabs.o: threadcontroller.h ../../ttmath/ttmath/ttmathobjects.h
|
||||
tabs.o: stopcalculating.h convert.h
|
||||
threadcontroller.o: threadcontroller.h ../../ttmath/ttmath/ttmathobjects.h
|
||||
threadcontroller.o: stopcalculating.h compileconfig.h
|
||||
threadcontroller.o: ../../ttmath/ttmath/ttmathtypes.h
|
||||
update.o: compileconfig.h update.h download.h programresources.h iniparser.h
|
||||
update.o: languages.h bigtypes.h ../../ttmath/ttmath/ttmath.h
|
||||
update.o: ../../ttmath/ttmath/ttmathbig.h ../../ttmath/ttmath/ttmathint.h
|
||||
update.o: ../../ttmath/ttmath/ttmathuint.h ../../ttmath/ttmath/ttmathtypes.h
|
||||
update.o: ../../ttmath/ttmath/ttmathmisc.h
|
||||
update.o: ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
update.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
update.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
update.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
update.o: ../../ttmath/ttmath/ttmathobjects.h
|
||||
update.o: ../../ttmath/ttmath/ttmathparser.h ../../ttmath/ttmath/ttmath.h
|
||||
update.o: threadcontroller.h ../../ttmath/ttmath/ttmathobjects.h
|
||||
update.o: stopcalculating.h ../../ttmath/ttmath/ttmathtypes.h convert.h
|
||||
update.o: messages.h resource.h winmain.h tabs.h pad.h misc.h
|
||||
variables.o: compileconfig.h tabs.h resource.h messages.h
|
||||
variables.o: ../../ttmath/ttmath/ttmathtypes.h programresources.h iniparser.h
|
||||
variables.o: languages.h bigtypes.h ../../ttmath/ttmath/ttmath.h
|
||||
variables.o: ../../ttmath/ttmath/ttmathbig.h ../../ttmath/ttmath/ttmathint.h
|
||||
variables.o: ../../ttmath/ttmath/ttmathuint.h
|
||||
variables.o: ../../ttmath/ttmath/ttmathtypes.h
|
||||
variables.o: ../../ttmath/ttmath/ttmathmisc.h
|
||||
variables.o: ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
variables.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
variables.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
variables.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
variables.o: ../../ttmath/ttmath/ttmathobjects.h
|
||||
variables.o: ../../ttmath/ttmath/ttmathparser.h ../../ttmath/ttmath/ttmath.h
|
||||
variables.o: threadcontroller.h ../../ttmath/ttmath/ttmathobjects.h
|
||||
variables.o: stopcalculating.h convert.h
|
||||
winmain.o: compileconfig.h winmain.h programresources.h iniparser.h
|
||||
winmain.o: languages.h bigtypes.h ../../ttmath/ttmath/ttmath.h
|
||||
winmain.o: ../../ttmath/ttmath/ttmathbig.h ../../ttmath/ttmath/ttmathint.h
|
||||
winmain.o: ../../ttmath/ttmath/ttmathuint.h ../../ttmath/ttmath/ttmathtypes.h
|
||||
winmain.o: ../../ttmath/ttmath/ttmathmisc.h
|
||||
winmain.o: ../../ttmath/ttmath/ttmathuint_x86.h
|
||||
winmain.o: ../../ttmath/ttmath/ttmathuint_x86_64.h
|
||||
winmain.o: ../../ttmath/ttmath/ttmathuint_noasm.h
|
||||
winmain.o: ../../ttmath/ttmath/ttmaththreads.h
|
||||
winmain.o: ../../ttmath/ttmath/ttmathobjects.h
|
||||
winmain.o: ../../ttmath/ttmath/ttmathparser.h ../../ttmath/ttmath/ttmath.h
|
||||
winmain.o: threadcontroller.h ../../ttmath/ttmath/ttmathobjects.h
|
||||
winmain.o: stopcalculating.h ../../ttmath/ttmath/ttmathtypes.h convert.h
|
||||
winmain.o: resource.h messages.h tabs.h pad.h update.h download.h
|
|
@ -0,0 +1,45 @@
|
|||
o = resource.o calculation.o convert.o functions.o iniparser.o languages.o mainwindow.o parsermanager.o programresources.o tabs.o variables.o winmain.o
|
||||
|
||||
calculation.o: calculation.cpp compileconfig.h parsermanager.h resource.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h tabs.h messages.h
|
||||
convert.o: convert.cpp convert.h compileconfig.h bigtypes.h
|
||||
functions.o: functions.cpp compileconfig.h tabs.h resource.h messages.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h
|
||||
iniparser.o: iniparser.cpp compileconfig.h iniparser.h
|
||||
languages.o: languages.cpp compileconfig.h languages.h bigtypes.h
|
||||
mainwindow.o: mainwindow.cpp compileconfig.h winmain.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h resource.h messages.h tabs.h
|
||||
parsermanager.o: parsermanager.cpp compileconfig.h parsermanager.h resource.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h tabs.h messages.h
|
||||
programresources.o: programresources.cpp compileconfig.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h
|
||||
tabs.o: tabs.cpp compileconfig.h tabs.h resource.h messages.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h
|
||||
variables.o: variables.cpp compileconfig.h tabs.h resource.h messages.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h
|
||||
winmain.o: winmain.cpp compileconfig.h winmain.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h resource.h messages.h tabs.h
|
||||
|
||||
|
||||
.SUFFIXES: .cpp .o
|
||||
|
||||
.cpp.o:
|
||||
$(CC) -c $(CFLAGS) $<
|
||||
|
||||
|
||||
helpdep = ../help/accuracy.html \
|
||||
../help/arithmetic_functions.html \
|
||||
../help/bitwise_functions.html \
|
||||
../help/conversions_deg_rad_grad.html \
|
||||
../help/help.hhp \
|
||||
../help/hyperbolic_functions.html \
|
||||
../help/index.hhk \
|
||||
../help/index.html \
|
||||
../help/inverse_hyperbolic_functions.html \
|
||||
../help/inverse_trigonometric_functions.html \
|
||||
../help/logarithm_exponential.html \
|
||||
../help/logical_functions.html \
|
||||
../help/operators_priority.html \
|
||||
../help/other_functions.html \
|
||||
../help/rounding_functions.html \
|
||||
../help/styles.css \
|
||||
../help/tips.html \
|
||||
../help/toc.hhc \
|
||||
../help/trigonometric_functions.html \
|
||||
../help/userfunctions.html \
|
||||
../help/values_and_std_operators.html
|
||||
|
||||
|
||||
setupdep = ttcalc help ../setup/innosetup.iss ../setup/COPYRIGHT ../COPYRIGHT ../CHANGELOG ../README
|
|
@ -1 +0,0 @@
|
|||
helpsrc = ../help/accuracy.html ../help/arithmetic_functions.html ../help/bitwise_functions.html ../help/conversions_deg_rad_grad.html ../help/help.hhp ../help/hyperbolic_functions.html ../help/index.hhk ../help/index.html ../help/inverse_hyperbolic_functions.html ../help/inverse_trigonometric_functions.html ../help/logarithm_exponential.html ../help/logical_functions.html ../help/operators_priority.html ../help/other_functions.html ../help/rounding_functions.html ../help/styles.css ../help/tips.html ../help/toc.hhc ../help/trigonometric_functions.html ../help/userfunctions.html ../help/values_and_std_operators.html
|
|
@ -1 +0,0 @@
|
|||
o = resource.o calculation.o convert.o download.o functions.o iniparser.o languages.o mainwindow.o misc.o pad.o parsermanager.o programresources.o tabs.o threadcontroller.o update.o variables.o winmain.o
|
|
@ -1,31 +1,21 @@
|
|||
include Makefile.o.dep
|
||||
include Makefile.help.dep
|
||||
|
||||
|
||||
CC = g++
|
||||
CFLAGS = -Wall -pedantic -s -Os -fno-default-inline -mwindows -I../../ttmath -DTTCALC_PORTABLE -DTTMATH_DONT_USE_WCHAR
|
||||
CFLAGS = -Wall -pedantic -s -Os -fno-default-inline -mwindows -I../../ttmath -DTTCALC_PORTABLE
|
||||
name = ttcalcp.exe
|
||||
compressor = upx
|
||||
|
||||
|
||||
|
||||
all: ttcalc
|
||||
|
||||
include Makefile.dep
|
||||
|
||||
%.o: %.cpp
|
||||
$(CC) -c $(CFLAGS) $<
|
||||
|
||||
|
||||
ttcalc: $(name)
|
||||
|
||||
|
||||
$(name): $(o)
|
||||
$(CC) -o $(name) $(CFLAGS) $(o) -lcomctl32 -lwininet
|
||||
ttcalc: $(o)
|
||||
$(CC) -o $(name) $(CFLAGS) $(o) -lcomctl32
|
||||
$(compressor) -7 $(name)
|
||||
|
||||
|
||||
|
||||
resource.o: resource.rc
|
||||
windres -DTTCALC_PORTABLE resource.rc resource.o
|
||||
|
||||
clean:
|
||||
rm -f *.o
|
||||
rm -f $(name)
|
||||
rm -f ../help/$(helpname)
|
||||
|
||||
include Makefile.cpp.dep
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -40,16 +40,9 @@
|
|||
|
||||
#include "compileconfig.h"
|
||||
|
||||
|
||||
//#define TTMATH_RELEASE
|
||||
#include <ttmath/ttmath.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
//"warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)"
|
||||
// (ttmath set it to default)
|
||||
#pragma warning (disable : 4800)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef TTCALC_PORTABLE
|
||||
|
||||
|
@ -60,24 +53,17 @@
|
|||
ttmath::Big<3,9>
|
||||
*/
|
||||
|
||||
/*
|
||||
typedef ttmath::Big<1,3> TTMathBig1;
|
||||
typedef ttmath::Big<2,9> TTMathBig2;
|
||||
typedef ttmath::Big<4,27> TTMathBig3;
|
||||
typedef TTMathBig3 TTMathBigMax;
|
||||
*/
|
||||
|
||||
typedef ttmath::Big<TTMATH_BITS(32), TTMATH_BITS(96) > TTMathBig1;
|
||||
typedef ttmath::Big<TTMATH_BITS(64), TTMATH_BITS(512) > TTMathBig2;
|
||||
typedef ttmath::Big<TTMATH_BITS(128), TTMATH_BITS(1024)> TTMathBig3;
|
||||
typedef TTMathBig3 TTMathBigMax;
|
||||
|
||||
#else
|
||||
|
||||
/* portable */
|
||||
|
||||
typedef ttmath::Big<TTMATH_BITS(32), TTMATH_BITS(96)> TTMathBig1;
|
||||
typedef TTMathBig1 TTMathBigMax;
|
||||
typedef ttmath::Big<1,3> TTMathBig1;
|
||||
typedef TTMathBig1 TTMathBigMax;
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -54,24 +54,18 @@
|
|||
if zero that means this is the release version of the program
|
||||
*/
|
||||
#define TTCALC_MAJOR_VER 0
|
||||
#define TTCALC_MINOR_VER 9
|
||||
#define TTCALC_REVISION_VER 3
|
||||
#define TTCALC_MINOR_VER 8
|
||||
#define TTCALC_REVISION_VER 7
|
||||
#define TTCALC_PRERELEASE_VER 0
|
||||
|
||||
|
||||
|
||||
/*!
|
||||
this disables a Visual C++ warning
|
||||
|
||||
this disables a Visual C++ warning about converting int to bool
|
||||
"warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)"
|
||||
*/
|
||||
#ifdef _MSC_VER
|
||||
|
||||
//"warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)"
|
||||
#pragma warning (disable : 4800)
|
||||
|
||||
// warning C4996: 'sprintf': This function or variable may be unsafe.
|
||||
#pragma warning (disable : 4996)
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32_IE
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
175
src/download.cpp
175
src/download.cpp
|
@ -1,175 +0,0 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name Tomasz Sowa nor the names of contributors to this
|
||||
* project may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <cstdio>
|
||||
#include "compileconfig.h"
|
||||
#include "download.h"
|
||||
|
||||
|
||||
Download::Download()
|
||||
{
|
||||
buffer_len = 128;
|
||||
progress = 0;
|
||||
|
||||
buffer = new char[buffer_len];
|
||||
}
|
||||
|
||||
|
||||
Download::~Download()
|
||||
{
|
||||
if( buffer )
|
||||
delete [] buffer;
|
||||
}
|
||||
|
||||
|
||||
void Download::SetProgress()
|
||||
{
|
||||
if( !progress )
|
||||
return;
|
||||
|
||||
SendMessage(progress, PBM_SETRANGE32, 0, all_len);
|
||||
SendMessage(progress, PBM_SETPOS, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
void Download::ChangeProgress(size_t size)
|
||||
{
|
||||
if( !progress )
|
||||
return;
|
||||
|
||||
SendMessage(progress, PBM_SETPOS, size, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Download::ClearProgress()
|
||||
{
|
||||
if( !progress )
|
||||
return;
|
||||
|
||||
SendMessage(progress, PBM_SETPOS, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
bool Download::DownloadLoop(HINTERNET conn)
|
||||
{
|
||||
DWORD read;
|
||||
|
||||
|
||||
while( true )
|
||||
{
|
||||
bool res = InternetReadFile(conn, buffer, buffer_len, &read);
|
||||
|
||||
if( !res )
|
||||
// some problems with downloading
|
||||
return false;
|
||||
|
||||
|
||||
if( read > 0 )
|
||||
{
|
||||
down_size += read;
|
||||
ChangeProgress(down_size);
|
||||
|
||||
if( !Read(buffer, read) )
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// end
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool Download::DownloadUrl(const char * url)
|
||||
{
|
||||
bool res = true;
|
||||
char browser[100];
|
||||
|
||||
down_size = 0;
|
||||
sprintf(browser, "TTCalc updater %d.%d.%d%s",
|
||||
TTCALC_MAJOR_VER,
|
||||
TTCALC_MINOR_VER,
|
||||
TTCALC_REVISION_VER,
|
||||
(TTCALC_PRERELEASE_VER>0)? " prerelease" : "");
|
||||
|
||||
|
||||
HINTERNET hint = InternetOpen(browser,INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0);
|
||||
if( !hint )
|
||||
return false;
|
||||
|
||||
HINTERNET conn = InternetOpenUrl(hint, url, 0, 0,
|
||||
INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_UI, 0);
|
||||
|
||||
if( conn )
|
||||
{
|
||||
GetLen(conn);
|
||||
SetProgress();
|
||||
|
||||
if( Init() )
|
||||
{
|
||||
res = DownloadLoop(conn);
|
||||
Close();
|
||||
ClearProgress();
|
||||
}
|
||||
|
||||
InternetCloseHandle(conn);
|
||||
}
|
||||
else
|
||||
{
|
||||
res = false;
|
||||
}
|
||||
|
||||
InternetCloseHandle(hint);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name Tomasz Sowa nor the names of contributors to this
|
||||
* project may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef headerfiledownload
|
||||
#define headerfiledownload
|
||||
|
||||
#include <windows.h>
|
||||
#include <wininet.h>
|
||||
#include <commctrl.h>
|
||||
|
||||
class Download
|
||||
{
|
||||
public:
|
||||
|
||||
Download();
|
||||
~Download();
|
||||
|
||||
bool DownloadUrl(const char * url);
|
||||
void AttachProgress(HWND p) { progress = p; }
|
||||
|
||||
protected:
|
||||
virtual bool DownloadLoop(HINTERNET conn);
|
||||
virtual void GetLen(HINTERNET conn) { all_len = 0; }
|
||||
virtual bool Init() { return false; }
|
||||
virtual bool Read(char * buffer, size_t size) { return false; }
|
||||
virtual void Close() {}
|
||||
virtual void SetProgress();
|
||||
virtual void ChangeProgress(size_t size);
|
||||
virtual void ClearProgress();
|
||||
|
||||
char * buffer;
|
||||
size_t buffer_len;
|
||||
size_t all_len;
|
||||
HWND progress;
|
||||
size_t down_size;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -85,14 +85,9 @@ int i;
|
|||
SendDlgItemMessage(hWnd,IDC_COMBO_FUNCTION_PARAM,CB_SETCURSEL,parameters,0);
|
||||
|
||||
if( adding )
|
||||
{
|
||||
SetFocus(GetDlgItem(hWnd,IDC_EDIT_FUNCTION_NAME));
|
||||
}
|
||||
else
|
||||
{
|
||||
SetFocus(GetDlgItem(hWnd,IDC_EDIT_FUNCTION_VALUE));
|
||||
SendDlgItemMessage(hWnd, IDC_EDIT_FUNCTION_VALUE, EM_SETSEL, value.size(), value.size());
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
|
@ -237,8 +232,6 @@ BOOL WmTabCommand_AddFunction(HWND, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
{
|
||||
int id = AddNewItemToFunctionList(list, name, value, parameters);
|
||||
Variables::SelectOnlyOneItem(list,id);
|
||||
GetPrgRes()->ReadVariablesFunctionsFromFile();
|
||||
GetPrgRes()->SaveToFile();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -304,11 +297,7 @@ adding = false;
|
|||
if( code != ttmath::err_ok )
|
||||
ShowError(list, code);
|
||||
else
|
||||
{
|
||||
ChangeItemInFunctionList(list, id, old_name, name, value, parameters);
|
||||
GetPrgRes()->ReadVariablesFunctionsFromFile();
|
||||
GetPrgRes()->SaveToFile();
|
||||
}
|
||||
}
|
||||
while( code != ttmath::err_ok );
|
||||
|
||||
|
@ -341,7 +330,6 @@ int items = ListView_GetSelectedCount(list);
|
|||
char * buffer = new char[buffer_size];
|
||||
bool all_deleted = true;
|
||||
|
||||
GetPrgRes()->ReadVariablesFunctionsFromFile();
|
||||
GetPrgRes()->GetThreadController()->StopCalculating();
|
||||
|
||||
for( id = ListView_GetItemCount(list)-1 ; id!=-1 ; --id )
|
||||
|
@ -360,7 +348,6 @@ int items = ListView_GetSelectedCount(list);
|
|||
|
||||
|
||||
GetPrgRes()->GetThreadController()->StartCalculating();
|
||||
GetPrgRes()->SaveToFile();
|
||||
|
||||
delete [] buffer;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
1416
src/languages.cpp
1416
src/languages.cpp
File diff suppressed because it is too large
Load Diff
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -101,17 +101,8 @@ public:
|
|||
display_rounding,
|
||||
display_always_scientific,
|
||||
display_not_always_scientific,
|
||||
display_decimal_point,
|
||||
display_deg_rad_grad,
|
||||
display_grouping,
|
||||
display_grouping_none,
|
||||
display_grouping_space,
|
||||
display_grouping_digits,
|
||||
display_input_decimal_point,
|
||||
display_input_decimal_point_item1,
|
||||
display_output_decimal_point,
|
||||
display_param_sep,
|
||||
display_param_sep_item2,
|
||||
display_param_sep_item3,
|
||||
convert_type,
|
||||
convert_input,
|
||||
convert_output,
|
||||
|
@ -124,7 +115,6 @@ public:
|
|||
menu_view_normal_view,
|
||||
menu_view_compact_view,
|
||||
menu_view_always_on_top,
|
||||
menu_view_pad,
|
||||
menu_view_lang_english,
|
||||
menu_view_lang_polish,
|
||||
menu_view_lang_spanish,
|
||||
|
@ -132,80 +122,35 @@ public:
|
|||
menu_view_lang_chinese,
|
||||
menu_view_lang_russian,
|
||||
menu_view_lang_swedish,
|
||||
menu_view_lang_italian,
|
||||
menu_view_lang_german,
|
||||
menu_view_close_program,
|
||||
menu_edit_undo,
|
||||
menu_edit_cut,
|
||||
menu_edit_copy,
|
||||
menu_edit_paste,
|
||||
menu_edit_del,
|
||||
menu_edit_paste_formula,
|
||||
menu_edit_copy_result,
|
||||
menu_edit_copy_both,
|
||||
menu_edit_select_all,
|
||||
menu_edit_bracket,
|
||||
menu_edit_swap,
|
||||
menu_help_help,
|
||||
menu_help_project_page,
|
||||
menu_help_check_update,
|
||||
menu_help_about,
|
||||
menu_update_available,
|
||||
cant_init_calculations,
|
||||
message_box_error_caption,
|
||||
cant_create_thread,
|
||||
cant_create_pad,
|
||||
cant_create_main_window,
|
||||
cant_init_common_controls,
|
||||
cant_find_help,
|
||||
cant_open_project_page,
|
||||
update_title,
|
||||
update_button_next,
|
||||
update_button_finish,
|
||||
update_button_cancel,
|
||||
update_check_at_startup,
|
||||
update_check_for_info,
|
||||
update_is_new_version,
|
||||
update_no_new_version1,
|
||||
update_no_new_version2,
|
||||
update_download_from,
|
||||
update_downloaded_info1,
|
||||
update_downloaded_info2,
|
||||
update_download_error,
|
||||
about_text,
|
||||
about_text_portable_version,
|
||||
about_text_exe_packer,
|
||||
about_box_title,
|
||||
about_box_button_close,
|
||||
display_as_scientific,
|
||||
pad_title,
|
||||
pad_menu_file,
|
||||
pad_menu_edit,
|
||||
pad_menu_file_new,
|
||||
pad_menu_file_open,
|
||||
pad_menu_file_saveas,
|
||||
pad_menu_file_close,
|
||||
pad_menu_edit_undo,
|
||||
pad_menu_edit_cut,
|
||||
pad_menu_edit_copy,
|
||||
pad_menu_edit_paste,
|
||||
pad_menu_edit_del,
|
||||
pad_menu_edit_select_all,
|
||||
cannot_open_file,
|
||||
cannot_save_file,
|
||||
file_too_long,
|
||||
other_error,
|
||||
display_group_scientific,
|
||||
unknown_error
|
||||
};
|
||||
|
||||
// the first item must be with zero index
|
||||
// and next items must be about one greater (0,1,2,3..)
|
||||
// (after conversion to 'int' we pass it into the std::vector)
|
||||
// lastnotexisting should be the last item
|
||||
// make sure SelectCurrentLanguage(const std::string & lang) is able to recognize a language
|
||||
enum Country
|
||||
{
|
||||
en = 0, pl, sp, da, chn, ru, swe, it, ger, lastnotexisting
|
||||
en = 0, pl, sp, da, chn, ru, swe
|
||||
};
|
||||
|
||||
|
||||
|
@ -240,18 +185,9 @@ public:
|
|||
|
||||
void SetCurrentLanguage(Country c)
|
||||
{
|
||||
// we are reading a language from *.ini file
|
||||
// and it is stored as a number
|
||||
|
||||
if( int(c) < 0 || int(c) >= (int)Languages::lastnotexisting )
|
||||
c = en;
|
||||
|
||||
current_country = c;
|
||||
}
|
||||
|
||||
void SelectCurrentLanguage(const std::string & lang);
|
||||
|
||||
|
||||
Country GetCurrentLanguage()
|
||||
{
|
||||
return current_country;
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -35,13 +35,9 @@
|
|||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <cstring>
|
||||
#include "compileconfig.h"
|
||||
#include "winmain.h"
|
||||
#include "update.h"
|
||||
#include "pad.h"
|
||||
#include "bigtypes.h"
|
||||
#include "misc.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -50,24 +46,6 @@ namespace MainWindowFunctions
|
|||
|
||||
|
||||
|
||||
|
||||
/*!
|
||||
returning true if hWnd is a handle of an edit control
|
||||
*/
|
||||
bool IsEditControl(HWND hWnd)
|
||||
{
|
||||
char buffer[30];
|
||||
|
||||
GetClassName( hWnd, buffer, sizeof(buffer)/sizeof(char) );
|
||||
|
||||
if( EqualStrings(buffer, "edit") )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*!
|
||||
Loop through all the controls and remove the
|
||||
dark border that the previous default push
|
||||
|
@ -260,68 +238,103 @@ return false;
|
|||
}
|
||||
|
||||
|
||||
int ToLower(int c)
|
||||
{
|
||||
if( c>='A' && c<='Z' )
|
||||
return c - 'A' + 'a';
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
this function compares two strings
|
||||
(case insensitive)
|
||||
*/
|
||||
bool EqualStrings(const char * str1, const char * str2)
|
||||
{
|
||||
for( ; ToLower(*str1) == ToLower(*str2) ; ++str1, ++str2 )
|
||||
if( *str1 == 0 )
|
||||
return true; // *str2 will be 0 too
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
this function is called when CTRL+C has been pressed
|
||||
|
||||
we're testing what type of control has a focus
|
||||
if it is not an edit control we will copy the result from the output edit
|
||||
and if is is an edit control we're checking whether the edit has a selecion or not,
|
||||
if it has not a selection we will copy the result otherwise we return 'false'
|
||||
and the CTRL+C will be passed into the standard procedure
|
||||
*/
|
||||
bool CopyResult()
|
||||
{
|
||||
HWND main_window = GetPrgRes()->GetMainWindow();
|
||||
HWND output_edit = GetDlgItem(main_window, IDC_OUTPUT_EDIT);
|
||||
DWORD out_sel_start, out_sel_end;
|
||||
|
||||
// we're getting the selection on the output edit
|
||||
// there may be no selection
|
||||
SendMessage(output_edit, EM_GETSEL, (WPARAM)&out_sel_start, (LPARAM)&out_sel_end);
|
||||
|
||||
// setting the selection for the whole control
|
||||
SendMessage(output_edit, EM_SETSEL, 0, -1);
|
||||
|
||||
// copying the result
|
||||
SendMessage(output_edit, WM_COPY, 0, 0);
|
||||
|
||||
// and restoring the selection to the previous state
|
||||
SendMessage(output_edit, EM_SETSEL, out_sel_start, out_sel_end);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*!
|
||||
if the focus is not on an edit window
|
||||
or it is on an edit but the edit has no selection
|
||||
then we're copying the result
|
||||
|
||||
this is used when Ctrl+C is pressed
|
||||
*/
|
||||
bool CopySpecial()
|
||||
{
|
||||
char buffer[30];
|
||||
DWORD sel_start, sel_end;
|
||||
HWND focus = GetFocus();
|
||||
bool copy = true;
|
||||
|
||||
if( IsEditControl(focus) )
|
||||
GetClassName( focus, buffer, sizeof(buffer)/sizeof(char) );
|
||||
|
||||
if( EqualStrings(buffer, "edit") )
|
||||
{
|
||||
DWORD sel_start, sel_end;
|
||||
SendMessage(focus, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
|
||||
|
||||
if( sel_start != sel_end ) // something is selected
|
||||
return false;
|
||||
if( sel_start != sel_end )
|
||||
// the control has a selection
|
||||
copy = false;
|
||||
}
|
||||
|
||||
CopyResult();
|
||||
|
||||
return true;
|
||||
if( copy )
|
||||
{
|
||||
// the control has no selection
|
||||
HWND main_window = GetPrgRes()->GetMainWindow();
|
||||
HWND output_edit = GetDlgItem(main_window, IDC_OUTPUT_EDIT);
|
||||
DWORD out_sel_start, out_sel_end;
|
||||
|
||||
// we're getting the selection on the output edit
|
||||
// there may be no selection
|
||||
SendMessage(output_edit, EM_GETSEL, (WPARAM)&out_sel_start, (LPARAM)&out_sel_end);
|
||||
// setting the selection for the whole control
|
||||
SendMessage(output_edit, EM_SETSEL, 0, -1);
|
||||
// copying the result
|
||||
SendMessage(output_edit, WM_COPY, 0, 0);
|
||||
// and restoring the selection to the previous state
|
||||
SendMessage(output_edit, EM_SETSEL, out_sel_start, out_sel_end);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!
|
||||
this function is called when CTRL+V has been pressed
|
||||
this is not Paste but PasteFormula (everything is copied to the input edit, even
|
||||
if the focus is on an another edit)
|
||||
|
||||
if a focus is not on an edit control (or it can be on an edit
|
||||
but the edit must be read only) we're sending WM_PASTE into the
|
||||
input edit and setting a focus on it
|
||||
*/
|
||||
bool PasteFormula()
|
||||
bool Paste()
|
||||
{
|
||||
char buffer[30];
|
||||
HWND focus = GetFocus();
|
||||
|
||||
GetClassName( focus, buffer, sizeof(buffer)/sizeof(char) );
|
||||
|
||||
if( EqualStrings(buffer, "edit") )
|
||||
{
|
||||
if( (GetWindowLong(focus, GWL_STYLE) & ES_READONLY) == 0 )
|
||||
return false;
|
||||
|
||||
// it's an edit but it has ES_READONLY style set
|
||||
}
|
||||
|
||||
HWND main_window = GetPrgRes()->GetMainWindow();
|
||||
HWND input_edit = GetDlgItem(main_window, IDC_INPUT_EDIT);
|
||||
|
||||
|
@ -366,8 +379,6 @@ HMENU menu = GetMenu(hWnd);
|
|||
if( !menu )
|
||||
return;
|
||||
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
|
||||
MENUITEMINFO mi;
|
||||
mi.cbSize = sizeof(mi);
|
||||
mi.fMask = MIIM_TYPE;
|
||||
|
@ -375,31 +386,22 @@ HMENU menu = GetMenu(hWnd);
|
|||
|
||||
// on popup menus we're using indexes because they don't want to work correctly
|
||||
// with the identifiers
|
||||
mi.dwTypeData = const_cast<char*>( pl->GuiMessage(Languages::menu_view) );
|
||||
mi.dwTypeData = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::menu_view) );
|
||||
SetMenuItemInfo(menu, IDM_VIEW_INDEX, true, &mi);
|
||||
|
||||
mi.dwTypeData = const_cast<char*>( pl->GuiMessage(Languages::menu_edit) );
|
||||
mi.dwTypeData = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::menu_edit) );
|
||||
SetMenuItemInfo(menu, IDM_EDIT_INDEX, true, &mi);
|
||||
|
||||
mi.dwTypeData = const_cast<char*>( pl->GuiMessage(Languages::menu_help) );
|
||||
mi.dwTypeData = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::menu_help) );
|
||||
SetMenuItemInfo(menu, IDM_HELP_INDEX, true, &mi);
|
||||
|
||||
if( GetPrgRes()->GetUpdateExists() )
|
||||
{
|
||||
mi.dwTypeData = const_cast<char*>( pl->GuiMessage(Languages::menu_update_available) );
|
||||
SetMenuItemInfo(menu, IDM_UPDATE_AVAILABLE_INDEX, true, &mi);
|
||||
}
|
||||
|
||||
mi.dwTypeData = const_cast<char*>( pl->GuiMessage(Languages::menu_language) );
|
||||
mi.dwTypeData = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::menu_language) );
|
||||
SetMenuItemInfo(GetSubMenu(menu,IDM_VIEW_INDEX), IDM_LANGUAGE_INDEX, true, &mi);
|
||||
|
||||
|
||||
|
||||
SetMenuLanguageItem(menu, IDM_NEW_WINDOW, Languages::menu_view_new_window);
|
||||
SetMenuLanguageItem(menu, IDM_NORMAL_VIEW, Languages::menu_view_normal_view);
|
||||
SetMenuLanguageItem(menu, IDM_COMPACT_VIEW, Languages::menu_view_compact_view);
|
||||
SetMenuLanguageItem(menu, IDM_ALWAYS_ON_TOP, Languages::menu_view_always_on_top);
|
||||
SetMenuLanguageItem(menu, IDM_PAD, Languages::menu_view_pad);
|
||||
SetMenuLanguageItem(menu, IDM_LANGUAGE_ENGLISH, Languages::menu_view_lang_english);
|
||||
SetMenuLanguageItem(menu, IDM_LANGUAGE_POLISH, Languages::menu_view_lang_polish);
|
||||
SetMenuLanguageItem(menu, IDM_LANGUAGE_SPANISH, Languages::menu_view_lang_spanish);
|
||||
|
@ -407,23 +409,12 @@ HMENU menu = GetMenu(hWnd);
|
|||
SetMenuLanguageItem(menu, IDM_LANGUAGE_CHINESE, Languages::menu_view_lang_chinese);
|
||||
SetMenuLanguageItem(menu, IDM_LANGUAGE_RUSSIAN, Languages::menu_view_lang_russian);
|
||||
SetMenuLanguageItem(menu, IDM_LANGUAGE_SWEDISH, Languages::menu_view_lang_swedish);
|
||||
SetMenuLanguageItem(menu, IDM_LANGUAGE_ITALIAN, Languages::menu_view_lang_italian);
|
||||
SetMenuLanguageItem(menu, IDM_LANGUAGE_GERMAN, Languages::menu_view_lang_german);
|
||||
SetMenuLanguageItem(menu, IDM_CLOSE_PROGRAM, Languages::menu_view_close_program);
|
||||
SetMenuLanguageItem(menu, IDM_EDIT_UNDO, Languages::menu_edit_undo);
|
||||
SetMenuLanguageItem(menu, IDM_EDIT_CUT, Languages::menu_edit_cut);
|
||||
SetMenuLanguageItem(menu, IDM_EDIT_COPY, Languages::menu_edit_copy);
|
||||
SetMenuLanguageItem(menu, IDM_EDIT_PASTE, Languages::menu_edit_paste);
|
||||
SetMenuLanguageItem(menu, IDM_EDIT_DEL, Languages::menu_edit_del);
|
||||
SetMenuLanguageItem(menu, IDM_EDIT_PASTE_FORMULA, Languages::menu_edit_paste_formula);
|
||||
SetMenuLanguageItem(menu, IDM_EDIT_COPY_RESULT, Languages::menu_edit_copy_result);
|
||||
SetMenuLanguageItem(menu, IDM_EDIT_COPY_BOTH, Languages::menu_edit_copy_both);
|
||||
SetMenuLanguageItem(menu, IDM_EDIT_SELECT_ALL, Languages::menu_edit_select_all);
|
||||
SetMenuLanguageItem(menu, IDM_EDIT_BRACKET, Languages::menu_edit_bracket);
|
||||
SetMenuLanguageItem(menu, IDM_EDIT_SWAP, Languages::menu_edit_swap);
|
||||
SetMenuLanguageItem(menu, IDM_HELP_HELP, Languages::menu_help_help);
|
||||
SetMenuLanguageItem(menu, IDM_HELP_PROJECT_PAGE, Languages::menu_help_project_page);
|
||||
SetMenuLanguageItem(menu, IDM_HELP_CHECK_UPDATE, Languages::menu_help_check_update);
|
||||
SetMenuLanguageItem(menu, IDM_HELP_ABOUT, Languages::menu_help_about);
|
||||
|
||||
DrawMenuBar(hWnd);
|
||||
|
@ -598,15 +589,14 @@ HWND hTab = GetDlgItem(hWnd,IDC_TAB);
|
|||
SendMessage(hWnd,WM_SETICON,ICON_BIG,(LPARAM)program_icon);
|
||||
|
||||
GetPrgRes()->SetAlwaysOnTop( GetPrgRes()->GetAlwaysOnTop() );
|
||||
GetPrgRes()->SetMaximized ( GetPrgRes()->GetMaximized() );
|
||||
GetPrgRes()->SetView ( GetPrgRes()->GetView() );
|
||||
|
||||
ShowWindow(hWnd,SW_SHOW);
|
||||
|
||||
SendDlgItemMessage(hWnd,IDC_INPUT_EDIT,EM_SETLIMITTEXT,GetPrgRes()->GetBufferSize()-1,0);
|
||||
SetMenuLanguage(hWnd);
|
||||
|
||||
#ifdef TTCALC_PORTABLE
|
||||
SetWindowText(hWnd, "TTCalc portable");
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -744,8 +734,7 @@ POINT p;
|
|||
TabWindowFunctions::SetSizeOfFunctionsList(tab, cx, cy-p.y, borderx, bordery);
|
||||
TabWindowFunctions::SetSizeOfConvertingLists(tab, cx, cy-p.y, borderx, bordery);
|
||||
|
||||
if( fwSizeType != SIZE_MINIMIZED && fwSizeType != SIZE_MAXIMIZED &&
|
||||
GetPrgRes()->GetView() != ProgramResources::view_compact )
|
||||
if( fwSizeType != SIZE_MINIMIZED && GetPrgRes()->GetView() != ProgramResources::view_compact )
|
||||
{
|
||||
GetWindowRect(hWnd,&r);
|
||||
GetPrgRes()->SetXSize( r.right - r.left );
|
||||
|
@ -775,15 +764,6 @@ void WmInitMenuPopUpView(HMENU menu)
|
|||
}
|
||||
|
||||
|
||||
if( GetPrgRes()->IsPadVisible() )
|
||||
{
|
||||
CheckMenuItem(menu,IDM_PAD,MF_BYCOMMAND|MF_CHECKED);
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckMenuItem(menu,IDM_PAD,MF_BYCOMMAND|MF_UNCHECKED);
|
||||
}
|
||||
|
||||
|
||||
// languages
|
||||
|
||||
|
@ -817,105 +797,33 @@ void WmInitMenuPopUpView(HMENU menu)
|
|||
else
|
||||
if( lang == Languages::swe )
|
||||
CheckMenuItem(menu, IDM_LANGUAGE_SWEDISH, MF_BYCOMMAND|MF_CHECKED);
|
||||
else
|
||||
if( lang == Languages::it )
|
||||
CheckMenuItem(menu, IDM_LANGUAGE_ITALIAN, MF_BYCOMMAND|MF_CHECKED);
|
||||
else
|
||||
if( lang == Languages::ger )
|
||||
CheckMenuItem(menu, IDM_LANGUAGE_GERMAN, MF_BYCOMMAND|MF_CHECKED);
|
||||
}
|
||||
|
||||
|
||||
void WmInitMenuPopUpEdit(HWND hWnd, HMENU menu)
|
||||
{
|
||||
bool edit = false; // an edit control has the focus
|
||||
bool edit_sel = false; // there is something selected on the edit
|
||||
bool edit_readonly = false; // the edit is read only
|
||||
char buffer[5];
|
||||
|
||||
HWND focus = GetFocus();
|
||||
edit = IsEditControl(focus);
|
||||
bool can_undo = SendDlgItemMessage(hWnd, IDC_INPUT_EDIT, EM_CANUNDO, 0 ,0);
|
||||
|
||||
if( edit )
|
||||
{
|
||||
DWORD sel_start, sel_end;
|
||||
SendMessage(focus, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
|
||||
|
||||
if( sel_start != sel_end )
|
||||
edit_sel = true;
|
||||
|
||||
if( (GetWindowLong(focus, GWL_STYLE) & ES_READONLY) != 0 )
|
||||
edit_readonly = true;
|
||||
}
|
||||
|
||||
|
||||
// undo
|
||||
if( edit && !edit_readonly && SendMessage(focus, EM_CANUNDO, 0 ,0) )
|
||||
if( can_undo )
|
||||
EnableMenuItem(menu,IDM_EDIT_UNDO,MF_BYCOMMAND | MF_ENABLED);
|
||||
else
|
||||
EnableMenuItem(menu,IDM_EDIT_UNDO,MF_BYCOMMAND | MF_GRAYED);
|
||||
|
||||
// cut
|
||||
if( edit && edit_sel && !edit_readonly )
|
||||
EnableMenuItem(menu,IDM_EDIT_CUT,MF_BYCOMMAND | MF_ENABLED);
|
||||
else
|
||||
EnableMenuItem(menu,IDM_EDIT_CUT,MF_BYCOMMAND | MF_GRAYED);
|
||||
|
||||
// paste
|
||||
if( edit && !edit_readonly )
|
||||
if( IsClipboardFormatAvailable(CF_TEXT) )
|
||||
EnableMenuItem(menu,IDM_EDIT_PASTE,MF_BYCOMMAND | MF_ENABLED);
|
||||
else
|
||||
EnableMenuItem(menu,IDM_EDIT_PASTE,MF_BYCOMMAND | MF_GRAYED);
|
||||
|
||||
// del
|
||||
if( edit && edit_sel && !edit_readonly )
|
||||
EnableMenuItem(menu,IDM_EDIT_DEL,MF_BYCOMMAND | MF_ENABLED);
|
||||
else
|
||||
EnableMenuItem(menu,IDM_EDIT_DEL,MF_BYCOMMAND | MF_GRAYED);
|
||||
|
||||
// copy
|
||||
if( edit && edit_sel )
|
||||
EnableMenuItem(menu,IDM_EDIT_COPY,MF_BYCOMMAND | MF_ENABLED);
|
||||
else
|
||||
EnableMenuItem(menu,IDM_EDIT_COPY,MF_BYCOMMAND | MF_GRAYED);
|
||||
GetDlgItemText(hWnd,IDC_OUTPUT_EDIT,buffer,sizeof(buffer));
|
||||
|
||||
// copy result
|
||||
int input_size = SendDlgItemMessage(hWnd, IDC_INPUT_EDIT, EM_LINELENGTH, 0, 0);
|
||||
int output_size = SendDlgItemMessage(hWnd, IDC_OUTPUT_EDIT, EM_LINELENGTH, 0, 0);
|
||||
|
||||
if( output_size != 0 )
|
||||
EnableMenuItem(menu,IDM_EDIT_COPY_RESULT,MF_BYCOMMAND | MF_ENABLED);
|
||||
else
|
||||
if( buffer[0] == 0 )
|
||||
EnableMenuItem(menu,IDM_EDIT_COPY_RESULT,MF_BYCOMMAND | MF_GRAYED);
|
||||
|
||||
// copy both
|
||||
if( input_size!=0 || output_size!=0 )
|
||||
EnableMenuItem(menu,IDM_EDIT_COPY_BOTH,MF_BYCOMMAND | MF_ENABLED);
|
||||
else
|
||||
EnableMenuItem(menu,IDM_EDIT_COPY_BOTH,MF_BYCOMMAND | MF_GRAYED);
|
||||
|
||||
// paste formula
|
||||
if( IsClipboardFormatAvailable(CF_TEXT) )
|
||||
EnableMenuItem(menu,IDM_EDIT_PASTE_FORMULA,MF_BYCOMMAND | MF_ENABLED);
|
||||
else
|
||||
EnableMenuItem(menu,IDM_EDIT_PASTE_FORMULA,MF_BYCOMMAND | MF_GRAYED);
|
||||
|
||||
// select all, bracket
|
||||
if( input_size > 0 )
|
||||
{
|
||||
EnableMenuItem(menu,IDM_EDIT_SELECT_ALL,MF_BYCOMMAND | MF_ENABLED);
|
||||
EnableMenuItem(menu,IDM_EDIT_BRACKET,MF_BYCOMMAND | MF_ENABLED);
|
||||
}
|
||||
else
|
||||
{
|
||||
EnableMenuItem(menu,IDM_EDIT_SELECT_ALL,MF_BYCOMMAND | MF_GRAYED);
|
||||
EnableMenuItem(menu,IDM_EDIT_BRACKET,MF_BYCOMMAND | MF_GRAYED);
|
||||
}
|
||||
|
||||
// swap
|
||||
if( output_size > 0 )
|
||||
EnableMenuItem(menu, IDM_EDIT_SWAP, MF_BYCOMMAND | MF_ENABLED);
|
||||
else
|
||||
EnableMenuItem(menu, IDM_EDIT_SWAP, MF_BYCOMMAND | MF_GRAYED);
|
||||
EnableMenuItem(menu,IDM_EDIT_COPY_RESULT,MF_BYCOMMAND | MF_ENABLED);
|
||||
}
|
||||
|
||||
|
||||
|
@ -983,14 +891,6 @@ return true;
|
|||
}
|
||||
|
||||
|
||||
BOOL WmCommand_Pad(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
GetPrgRes()->ShowPad( !GetPrgRes()->IsPadVisible() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmCommand_HelpAbout(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
DialogBox(GetPrgRes()->GetInstance(),MAKEINTRESOURCE(IDD_ABOUT_DIALOG),hWnd,AboutProc);
|
||||
|
@ -999,22 +899,6 @@ return true;
|
|||
}
|
||||
|
||||
|
||||
BOOL WmCommand_HelpCheckUpdate(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
ShowUpdateDialog(hWnd);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmCommand_UpdateAvailable(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
ShowUpdateDialogAfterCheck(hWnd);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOL WmCommand_NewWindow(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
STARTUPINFO si;
|
||||
|
@ -1062,79 +946,14 @@ return true;
|
|||
|
||||
BOOL WmCommand_EditUndo(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HWND focus = GetFocus();
|
||||
SendMessage(focus, EM_UNDO, 0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmCommand_EditPasteFormula(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HWND input_edit = GetDlgItem(hWnd, IDC_INPUT_EDIT);
|
||||
SendMessage(input_edit, WM_PASTE, 0, 0);
|
||||
SetFocus(input_edit);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmCommand_EditCopy(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HWND focus = GetFocus();
|
||||
SendMessage(focus, WM_COPY, 0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmCommand_EditCut(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HWND focus = GetFocus();
|
||||
SendMessage(focus, WM_CUT, 0, 0);
|
||||
SendDlgItemMessage(hWnd, IDC_INPUT_EDIT, EM_UNDO, 0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmCommand_EditPaste(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HWND focus = GetFocus();
|
||||
SendMessage(focus, WM_PASTE, 0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmCommand_EditDel(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HWND focus = GetFocus();
|
||||
|
||||
if( IsEditControl(focus) )
|
||||
SendMessage(focus, EM_REPLACESEL, 1, (LPARAM)"");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmCommand_EditBracket(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
SendMessage(GetPrgRes()->GetMainWindow(), WM_COMMAND, IDC_BUTTON_BRACKETS_ALL, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmCommand_EditSwap(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
char * buf = GetPrgRes()->GetBufferTemp();
|
||||
GetDlgItemText(hWnd, IDC_OUTPUT_EDIT, buf, GetPrgRes()->GetBufferSize());
|
||||
|
||||
if( buf[0] == 0 )
|
||||
return true; // output edit is empty
|
||||
|
||||
SetDlgItemText(hWnd, IDC_INPUT_EDIT, buf);
|
||||
|
||||
// setting the caret at the end of the input edit
|
||||
int len = SendDlgItemMessage(hWnd, IDC_INPUT_EDIT, EM_LINELENGTH, 0, 0);
|
||||
SendDlgItemMessage(hWnd, IDC_INPUT_EDIT, EM_SETSEL, len, len);
|
||||
SendDlgItemMessage(hWnd, IDC_INPUT_EDIT, WM_PASTE, 0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1142,61 +961,9 @@ return true;
|
|||
|
||||
BOOL WmCommand_EditCopyResult(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
CopyResult();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmCommand_EditCopyBoth(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
unsigned int in_len = SendDlgItemMessage(hWnd, IDC_INPUT_EDIT, EM_LINELENGTH, 0, 0);
|
||||
unsigned int out_len = SendDlgItemMessage(hWnd, IDC_OUTPUT_EDIT, EM_LINELENGTH, 0, 0);
|
||||
bool set_correct = false;
|
||||
|
||||
if( in_len >= GetPrgRes()->GetBufferSize() || out_len >= GetPrgRes()->GetBufferSize() )
|
||||
return true;
|
||||
|
||||
if( !OpenClipboard(hWnd) )
|
||||
return true;
|
||||
|
||||
EmptyClipboard();
|
||||
HGLOBAL global = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, in_len+out_len + 20);
|
||||
|
||||
if( global )
|
||||
{
|
||||
char * text = (char*)GlobalLock(global);
|
||||
|
||||
if( text )
|
||||
{
|
||||
char * buf = GetPrgRes()->GetBufferTemp();
|
||||
|
||||
*(WORD*)buf = in_len + 1;
|
||||
SendDlgItemMessage(hWnd, IDC_INPUT_EDIT, EM_GETLINE, 0, (LPARAM)buf);
|
||||
sprintf(text, "%s = ", buf);
|
||||
|
||||
*(WORD*)buf = out_len + 1;
|
||||
SendDlgItemMessage(hWnd, IDC_OUTPUT_EDIT, EM_GETLINE, 0, (LPARAM)buf);
|
||||
std::strcat(text, buf);
|
||||
|
||||
GlobalUnlock(global);
|
||||
set_correct = (bool)SetClipboardData(CF_TEXT, global);
|
||||
}
|
||||
}
|
||||
|
||||
CloseClipboard();
|
||||
|
||||
/*
|
||||
don't call GlobalFree(global) if SetClipboardData() returned true
|
||||
|
||||
http://msdn.microsoft.com/en-us/library/ms649051%28VS.85%29.aspx
|
||||
If SetClipboardData succeeds, the system owns the object identified by the hMem parameter.
|
||||
The application may not write to or free the data once ownership has been transferred to
|
||||
the system, but it can lock and read from the data until the CloseClipboard function is called
|
||||
*/
|
||||
|
||||
if( global && !set_correct )
|
||||
GlobalFree(global);
|
||||
SendDlgItemMessage(hWnd, IDC_OUTPUT_EDIT, EM_SETSEL, 0, LPARAM(-1));
|
||||
SendDlgItemMessage(hWnd, IDC_OUTPUT_EDIT, WM_COPY, 0, 0);
|
||||
SendDlgItemMessage(hWnd, IDC_OUTPUT_EDIT, EM_SETSEL, WPARAM(-1), 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1264,7 +1031,6 @@ BOOL WmCommand_LanguageEnglish(HWND hWnd, UINT message, WPARAM wParam, LPARAM lP
|
|||
SetMenuLanguage(hWnd);
|
||||
SetOutputEditLanguage(hWnd);
|
||||
TabWindowFunctions::SetLanguage( GetDlgItem(hWnd, IDC_TAB) );
|
||||
SetPadLanguage();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1277,7 +1043,6 @@ BOOL WmCommand_LanguagePolish(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
SetMenuLanguage(hWnd);
|
||||
SetOutputEditLanguage(hWnd);
|
||||
TabWindowFunctions::SetLanguage( GetDlgItem(hWnd, IDC_TAB) );
|
||||
SetPadLanguage();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1290,7 +1055,6 @@ BOOL WmCommand_LanguageSpanish(HWND hWnd, UINT message, WPARAM wParam, LPARAM lP
|
|||
SetMenuLanguage(hWnd);
|
||||
SetOutputEditLanguage(hWnd);
|
||||
TabWindowFunctions::SetLanguage( GetDlgItem(hWnd, IDC_TAB) );
|
||||
SetPadLanguage();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1302,7 +1066,6 @@ BOOL WmCommand_LanguageDanish(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
SetMenuLanguage(hWnd);
|
||||
SetOutputEditLanguage(hWnd);
|
||||
TabWindowFunctions::SetLanguage( GetDlgItem(hWnd, IDC_TAB) );
|
||||
SetPadLanguage();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1314,7 +1077,6 @@ BOOL WmCommand_LanguageChinese(HWND hWnd, UINT message, WPARAM wParam, LPARAM lP
|
|||
SetMenuLanguage(hWnd);
|
||||
SetOutputEditLanguage(hWnd);
|
||||
TabWindowFunctions::SetLanguage( GetDlgItem(hWnd, IDC_TAB) );
|
||||
SetPadLanguage();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1326,7 +1088,6 @@ BOOL WmCommand_LanguageRussian(HWND hWnd, UINT message, WPARAM wParam, LPARAM lP
|
|||
SetMenuLanguage(hWnd);
|
||||
SetOutputEditLanguage(hWnd);
|
||||
TabWindowFunctions::SetLanguage( GetDlgItem(hWnd, IDC_TAB) );
|
||||
SetPadLanguage();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1338,35 +1099,10 @@ BOOL WmCommand_LanguageSwedish(HWND hWnd, UINT message, WPARAM wParam, LPARAM lP
|
|||
SetMenuLanguage(hWnd);
|
||||
SetOutputEditLanguage(hWnd);
|
||||
TabWindowFunctions::SetLanguage( GetDlgItem(hWnd, IDC_TAB) );
|
||||
SetPadLanguage();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmCommand_LanguageItalian(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
GetPrgRes()->GetLanguages()->SetCurrentLanguage(Languages::it);
|
||||
|
||||
SetMenuLanguage(hWnd);
|
||||
SetOutputEditLanguage(hWnd);
|
||||
TabWindowFunctions::SetLanguage( GetDlgItem(hWnd, IDC_TAB) );
|
||||
SetPadLanguage();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmCommand_LanguageGerman(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
GetPrgRes()->GetLanguages()->SetCurrentLanguage(Languages::ger);
|
||||
|
||||
SetMenuLanguage(hWnd);
|
||||
SetOutputEditLanguage(hWnd);
|
||||
TabWindowFunctions::SetLanguage( GetDlgItem(hWnd, IDC_TAB) );
|
||||
SetPadLanguage();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmHelp(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
|
@ -1376,7 +1112,7 @@ SHELLEXECUTEINFO exec;
|
|||
exec.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOCLOSEPROCESS;
|
||||
exec.hwnd = 0;
|
||||
exec.lpVerb = "open";
|
||||
exec.lpFile = GetPrgRes()->GetHelpFile().c_str();
|
||||
exec.lpFile = "ttcalc.chm";
|
||||
exec.lpParameters = 0;
|
||||
exec.lpDirectory = "";
|
||||
exec.nShow = SW_SHOWNORMAL;
|
||||
|
@ -1419,54 +1155,19 @@ return true;
|
|||
}
|
||||
|
||||
|
||||
BOOL WmUpdateExists(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
MENUITEMINFO mi;
|
||||
|
||||
mi.cbSize = sizeof(mi);
|
||||
mi.fMask = MIIM_TYPE | MIIM_ID;
|
||||
mi.fType = MFT_STRING;
|
||||
mi.dwTypeData = const_cast<char*>(GetPrgRes()->GetLanguages()->GuiMessage(Languages::menu_update_available));
|
||||
mi.cch = 0;
|
||||
mi.wID = IDM_UPDATE_AVAILABLE;
|
||||
|
||||
HMENU menu = GetMenu(hWnd);
|
||||
|
||||
if( !menu )
|
||||
return true;
|
||||
|
||||
InsertMenuItem(menu, IDM_UPDATE_AVAILABLE_INDEX, true, &mi);
|
||||
GetPrgRes()->SetUpdateExists(true); // used for the dynamic menu (for changing languages)
|
||||
DrawMenuBar(hWnd);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void CreateCommandMessagesTable(Messages<BOOL> & cmessages)
|
||||
void CreateCommandMessagesTable(Messages & cmessages)
|
||||
{
|
||||
cmessages.Associate(IDM_ALWAYS_ON_TOP, WmCommand_AlwaysOnTop);
|
||||
cmessages.Associate(IDM_NORMAL_VIEW, WmCommand_NormalView);
|
||||
cmessages.Associate(IDM_COMPACT_VIEW, WmCommand_CompactView);
|
||||
cmessages.Associate(IDM_PAD, WmCommand_Pad);
|
||||
cmessages.Associate(IDM_HELP_ABOUT, WmCommand_HelpAbout);
|
||||
cmessages.Associate(IDM_HELP_CHECK_UPDATE, WmCommand_HelpCheckUpdate);
|
||||
cmessages.Associate(IDM_UPDATE_AVAILABLE, WmCommand_UpdateAvailable);
|
||||
cmessages.Associate(IDM_NEW_WINDOW, WmCommand_NewWindow);
|
||||
cmessages.Associate(IDM_CLOSE_PROGRAM, WmCommand_CloseProgram);
|
||||
cmessages.Associate(IDC_INPUT_EDIT, WmCommand_InputEditNotify);
|
||||
cmessages.Associate(IDM_EDIT_UNDO, WmCommand_EditUndo);
|
||||
cmessages.Associate(IDM_EDIT_PASTE_FORMULA, WmCommand_EditPasteFormula);
|
||||
cmessages.Associate(IDM_EDIT_COPY_RESULT, WmCommand_EditCopyResult);
|
||||
cmessages.Associate(IDM_EDIT_COPY_BOTH, WmCommand_EditCopyBoth);
|
||||
cmessages.Associate(IDM_EDIT_COPY, WmCommand_EditCopy);
|
||||
cmessages.Associate(IDM_EDIT_CUT, WmCommand_EditCut);
|
||||
cmessages.Associate(IDM_EDIT_PASTE, WmCommand_EditPaste);
|
||||
cmessages.Associate(IDM_EDIT_DEL, WmCommand_EditDel);
|
||||
cmessages.Associate(IDM_EDIT_BRACKET, WmCommand_EditBracket);
|
||||
cmessages.Associate(IDM_EDIT_SWAP, WmCommand_EditSwap);
|
||||
cmessages.Associate(IDM_EDIT_COPY_RESULT, WmCommand_EditCopyResult);
|
||||
cmessages.Associate(IDCANCEL, WmCommand_IDCANCEL);
|
||||
cmessages.Associate(IDM_EDIT_SELECT_ALL, WmCommand_IDCANCEL);
|
||||
cmessages.Associate(IDM_LANGUAGE_ENGLISH, WmCommand_LanguageEnglish);
|
||||
cmessages.Associate(IDM_LANGUAGE_POLISH, WmCommand_LanguagePolish);
|
||||
cmessages.Associate(IDM_LANGUAGE_SPANISH, WmCommand_LanguageSpanish);
|
||||
|
@ -1474,8 +1175,6 @@ void CreateCommandMessagesTable(Messages<BOOL> & cmessages)
|
|||
cmessages.Associate(IDM_LANGUAGE_CHINESE, WmCommand_LanguageChinese);
|
||||
cmessages.Associate(IDM_LANGUAGE_RUSSIAN, WmCommand_LanguageRussian);
|
||||
cmessages.Associate(IDM_LANGUAGE_SWEDISH, WmCommand_LanguageSwedish);
|
||||
cmessages.Associate(IDM_LANGUAGE_ITALIAN, WmCommand_LanguageItalian);
|
||||
cmessages.Associate(IDM_LANGUAGE_GERMAN, WmCommand_LanguageGerman);
|
||||
cmessages.Associate(IDM_HELP_HELP, WmHelp);
|
||||
cmessages.Associate(IDM_HELP_PROJECT_PAGE, WmProjectPage);
|
||||
}
|
||||
|
@ -1483,7 +1182,7 @@ void CreateCommandMessagesTable(Messages<BOOL> & cmessages)
|
|||
|
||||
BOOL WmCommand(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static Messages<BOOL> command_messages;
|
||||
static Messages command_messages;
|
||||
|
||||
if( command_messages.Empty() )
|
||||
// initiation
|
||||
|
@ -1497,7 +1196,7 @@ static Messages<BOOL> command_messages;
|
|||
|
||||
|
||||
|
||||
void CreateMainMessagesTable(Messages<BOOL> & messages)
|
||||
void CreateMainMessagesTable(Messages & messages)
|
||||
{
|
||||
messages.Associate(WM_INITDIALOG, WmInitDialog);
|
||||
messages.Associate(WM_MOVE, WmMove);
|
||||
|
@ -1510,7 +1209,6 @@ void CreateMainMessagesTable(Messages<BOOL> & messages)
|
|||
messages.Associate(WM_SIZING, WmSizing);
|
||||
messages.Associate(WM_SET_LAST_ERROR, WmSetLastError);
|
||||
messages.Associate(WM_HELP, WmHelp);
|
||||
messages.Associate(WM_UPDATE_EXISTS, WmUpdateExists);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1578,10 +1276,9 @@ char compiler[50];
|
|||
#else
|
||||
GetPrgRes()->GetLanguages()->GuiMessage(Languages::about_text_portable_version),
|
||||
#endif
|
||||
(TTCALC_PRERELEASE_VER!=0)? " prerelease" : "",
|
||||
(TTCALC_PRERELEASE_VER!=0)? " (prerelease)" : "",
|
||||
TTMATH_MAJOR_VER, TTMATH_MINOR_VER, TTMATH_REVISION_VER,
|
||||
(TTMATH_PRERELEASE_VER!=0)? " prerelease" : "",
|
||||
TTMathBigMax::LibTypeStr(),
|
||||
(TTMATH_PRERELEASE_VER!=0)? " (prerelease)" : "",
|
||||
compiler,
|
||||
#ifndef TTCALC_PORTABLE
|
||||
""
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -42,12 +42,10 @@
|
|||
#include <windows.h>
|
||||
|
||||
|
||||
|
||||
template<typename ProcReturnType>
|
||||
class Messages
|
||||
{
|
||||
public:
|
||||
typedef ProcReturnType (*MessageFunction)(HWND, UINT, WPARAM, LPARAM);
|
||||
typedef BOOL (*MessageFunction)(HWND, UINT, WPARAM, LPARAM);
|
||||
typedef std::map<UINT, MessageFunction> MessageTable;
|
||||
|
||||
|
||||
|
@ -63,28 +61,19 @@ public:
|
|||
}
|
||||
|
||||
|
||||
ProcReturnType Call(UINT key, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, bool * method_exists = 0)
|
||||
bool Call(UINT key, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
typename MessageTable::iterator i = message_table.find(key);
|
||||
MessageTable::iterator i = message_table.find(key);
|
||||
|
||||
if( i == message_table.end() )
|
||||
{
|
||||
if( method_exists )
|
||||
*method_exists = false;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if( method_exists )
|
||||
*method_exists = true;
|
||||
|
||||
return i->second(hWnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
bool IsMessage(UINT key)
|
||||
{
|
||||
typename MessageTable::iterator i = message_table.find(key);
|
||||
MessageTable::iterator i = message_table.find(key);
|
||||
|
||||
if( i == message_table.end() )
|
||||
return false;
|
||||
|
|
78
src/misc.cpp
78
src/misc.cpp
|
@ -1,78 +0,0 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2010, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name Tomasz Sowa nor the names of contributors to this
|
||||
* project may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
int ToLower(int c)
|
||||
{
|
||||
if( c>='A' && c<='Z' )
|
||||
return c - 'A' + 'a';
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
this function compares two strings
|
||||
(case insensitive)
|
||||
*/
|
||||
bool EqualStrings(const char * str1, const char * str2)
|
||||
{
|
||||
for( ; ToLower(*str1) == ToLower(*str2) ; ++str1, ++str2 )
|
||||
if( *str1 == 0 )
|
||||
return true; // *str2 will be 0 too
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
returning true if short_str is a substring of long_str (no case-sensitive)
|
||||
*/
|
||||
bool IsSubStringNoCase(const char * short_str, const char * long_str)
|
||||
{
|
||||
while( *short_str && *long_str && ToLower(*short_str) == ToLower(*long_str) )
|
||||
{
|
||||
++short_str;
|
||||
++long_str;
|
||||
}
|
||||
|
||||
if( *short_str == 0 )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
47
src/misc.h
47
src/misc.h
|
@ -1,47 +0,0 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2010, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name Tomasz Sowa nor the names of contributors to this
|
||||
* project may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef headerfilemisc
|
||||
#define headerfilemisc
|
||||
|
||||
int ToLower(int c);
|
||||
bool EqualStrings(const char * str1, const char * str2);
|
||||
bool IsSubStringNoCase(const char * short_str, const char * long_str);
|
||||
|
||||
|
||||
#endif
|
943
src/pad.cpp
943
src/pad.cpp
|
@ -1,943 +0,0 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2010, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name Tomasz Sowa nor the names of contributors to this
|
||||
* project may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include <ttmath/ttmath.h>
|
||||
#include <shlobj.h>
|
||||
#include <fstream>
|
||||
#include "programresources.h"
|
||||
#include "resource.h"
|
||||
#include "messages.h"
|
||||
#include "bigtypes.h"
|
||||
#include "pad.h"
|
||||
|
||||
|
||||
namespace Pad
|
||||
{
|
||||
HWND edit;
|
||||
WNDPROC old_edit_proc;
|
||||
std::string parse_string;
|
||||
int precision;
|
||||
HFONT font;
|
||||
|
||||
int base_input;
|
||||
int base_output;
|
||||
bool always_scientific;
|
||||
int when_scientific;
|
||||
int rounding;
|
||||
bool remove_zeroes;
|
||||
int angle_deg_rad_grad;
|
||||
|
||||
char decimal_point;
|
||||
char grouping;
|
||||
char input_comma1;
|
||||
char input_comma2;
|
||||
char param_sep;
|
||||
|
||||
int grouping_digits;
|
||||
|
||||
Languages::Country country;
|
||||
|
||||
int last_variables_id;
|
||||
int last_functions_id;
|
||||
ttmath::Objects * variables;
|
||||
ttmath::Objects * functions;
|
||||
|
||||
ttmath::ErrorCode code;
|
||||
bool calculated;
|
||||
|
||||
std::string res, res2;
|
||||
std::string file_name;
|
||||
|
||||
|
||||
#ifndef TTCALC_PORTABLE
|
||||
ttmath::Parser<TTMathBig1> parser1;
|
||||
ttmath::Parser<TTMathBig2> parser2;
|
||||
ttmath::Parser<TTMathBig3> parser3;
|
||||
#else
|
||||
ttmath::Parser<TTMathBig1> parser1;
|
||||
#endif
|
||||
|
||||
|
||||
void PutChars(const char * str)
|
||||
{
|
||||
SendMessage(edit, EM_REPLACESEL, true, (LPARAM)str);
|
||||
}
|
||||
|
||||
|
||||
void PutChars(std::string & str)
|
||||
{
|
||||
PutChars(str.c_str());
|
||||
}
|
||||
|
||||
|
||||
void PutOverflowMsg()
|
||||
{
|
||||
PutChars(GetPrgRes()->GetLanguages()->ErrorMessage(country, ttmath::err_overflow));
|
||||
PutChars("\r\n");
|
||||
}
|
||||
|
||||
|
||||
template<typename ValueType>
|
||||
void PutResultFromParser(ttmath::Parser<ValueType> & matparser)
|
||||
{
|
||||
unsigned int i = 0;
|
||||
|
||||
res.clear();
|
||||
res2.clear();
|
||||
|
||||
for(i=0 ; i<matparser.stack.size() ; ++i)
|
||||
{
|
||||
try
|
||||
{
|
||||
ValueType result = matparser.stack[i].value;
|
||||
|
||||
ttmath::Conv conv;
|
||||
|
||||
conv.base = base_output;
|
||||
conv.scient = always_scientific;
|
||||
conv.scient_from = when_scientific;
|
||||
conv.round = rounding;
|
||||
conv.trim_zeroes = remove_zeroes;
|
||||
conv.comma = decimal_point;
|
||||
conv.group = grouping;
|
||||
conv.group_digits = grouping_digits;
|
||||
|
||||
if( result.ToString(res2, conv) )
|
||||
res2 = GetPrgRes()->GetLanguages()->GuiMessage(country, Languages::overflow_during_printing);
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
res2 = GetPrgRes()->GetLanguages()->ErrorMessage(country, ttmath::err_internal_error);
|
||||
}
|
||||
|
||||
res += res2;
|
||||
|
||||
if( i < matparser.stack.size()-1 )
|
||||
res += "\r\n";
|
||||
}
|
||||
|
||||
res += ' ';
|
||||
PutChars(res);
|
||||
}
|
||||
|
||||
|
||||
void PutResult()
|
||||
{
|
||||
#ifndef TTCALC_PORTABLE
|
||||
|
||||
switch( precision )
|
||||
{
|
||||
case 0:
|
||||
PutResultFromParser(parser1);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
PutResultFromParser(parser2);
|
||||
break;
|
||||
|
||||
default:
|
||||
PutResultFromParser(parser3);
|
||||
break;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
PutResultFromParser(parser1);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
// line - index of a line -- as you see it on the edit control
|
||||
// (if the text is wrapped then the line is larger)
|
||||
void GetParseString(const char * buf, int line)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = SendMessage(edit, EM_LINEINDEX, line, 0);
|
||||
// first_line_char takes into consideration \r\n characters
|
||||
|
||||
if( i < 0 )
|
||||
// something wrong
|
||||
return;
|
||||
|
||||
// looking for the beginning of the line (lines can be wrapped)
|
||||
for( ; i>0 && buf[i-1]!=10 ; --i);
|
||||
|
||||
// copying the whole line
|
||||
for( ; buf[i]!=0 && buf[i]!='\r' && buf[i]!='\n' ; ++i )
|
||||
parse_string += buf[i];
|
||||
}
|
||||
|
||||
|
||||
void GetParseString()
|
||||
{
|
||||
int line;
|
||||
|
||||
parse_string.clear();
|
||||
|
||||
// index of a last line to parse (-1 because the ENTER has been put)
|
||||
line = SendMessage(edit, EM_LINEFROMCHAR, -1, 0) - 1;
|
||||
|
||||
if( line < 0 )
|
||||
// something wrong
|
||||
return;
|
||||
|
||||
|
||||
HLOCAL handle = (HLOCAL)SendMessage(edit, EM_GETHANDLE, 0, 0);
|
||||
|
||||
if( handle == 0 )
|
||||
// something wrong
|
||||
return;
|
||||
|
||||
const char * buf = (const char*)LocalLock(handle);
|
||||
|
||||
if( buf )
|
||||
GetParseString(buf, line);
|
||||
|
||||
LocalUnlock(handle);
|
||||
}
|
||||
|
||||
|
||||
template<class ValueType>
|
||||
void ParseString(ttmath::Parser<ValueType> & matparser)
|
||||
{
|
||||
matparser.SetBase(base_input);
|
||||
matparser.SetDegRadGrad(angle_deg_rad_grad);
|
||||
matparser.SetComma(input_comma1, input_comma2);
|
||||
matparser.SetGroup(grouping);
|
||||
matparser.SetParamSep(param_sep);
|
||||
|
||||
matparser.SetVariables(variables);
|
||||
matparser.SetFunctions(functions);
|
||||
|
||||
code = matparser.Parse(parse_string.c_str());
|
||||
|
||||
calculated = matparser.Calculated();
|
||||
}
|
||||
|
||||
|
||||
void SetParameters()
|
||||
{
|
||||
base_input = GetPrgRes()->GetBaseInput();
|
||||
base_output = GetPrgRes()->GetBaseOutput();
|
||||
always_scientific = GetPrgRes()->GetDisplayAlwaysScientific();
|
||||
when_scientific = GetPrgRes()->GetDisplayWhenScientific();
|
||||
rounding = GetPrgRes()->GetDisplayRounding();
|
||||
precision = GetPrgRes()->GetPrecision();
|
||||
remove_zeroes = GetPrgRes()->GetRemovingZeroes();
|
||||
angle_deg_rad_grad = GetPrgRes()->GetDegRadGrad();
|
||||
country = GetPrgRes()->GetLanguages()->GetCurrentLanguage();
|
||||
decimal_point = GetPrgRes()->GetDecimalPointChar();
|
||||
grouping = GetPrgRes()->GetGroupingChar();
|
||||
grouping_digits = GetPrgRes()->GetGroupingDigits();
|
||||
param_sep = GetPrgRes()->GetParamSepChar();
|
||||
|
||||
GetPrgRes()->GetInputDecimalPointChar(&input_comma1, &input_comma2);
|
||||
|
||||
variables = GetPrgRes()->GetVariables();
|
||||
functions = GetPrgRes()->GetFunctions();
|
||||
}
|
||||
|
||||
|
||||
void ParseString()
|
||||
{
|
||||
if( parse_string.empty() )
|
||||
return;
|
||||
|
||||
SetParameters();
|
||||
|
||||
try
|
||||
{
|
||||
#ifndef TTCALC_PORTABLE
|
||||
|
||||
switch( precision )
|
||||
{
|
||||
case 0:
|
||||
ParseString(parser1);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
ParseString(parser2);
|
||||
break;
|
||||
|
||||
default:
|
||||
ParseString(parser3);
|
||||
break;
|
||||
}
|
||||
|
||||
#else
|
||||
ParseString(parser1);
|
||||
#endif
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
code = ttmath::err_internal_error;
|
||||
}
|
||||
|
||||
|
||||
if( code==ttmath::err_ok && calculated )
|
||||
PutResult();
|
||||
else
|
||||
if( code==ttmath::err_overflow )
|
||||
PutOverflowMsg();
|
||||
}
|
||||
|
||||
|
||||
LRESULT EditReturnPressed(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
DWORD sel_start, sel_end;
|
||||
|
||||
SendMessage(edit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
|
||||
|
||||
// putting the ENTER
|
||||
LRESULT res = CallWindowProc(old_edit_proc, hwnd, msg, wParam, lParam);
|
||||
|
||||
if( sel_start != sel_end )
|
||||
// something was selected
|
||||
return res;
|
||||
|
||||
GetParseString();
|
||||
ParseString();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
LRESULT EditSubclass(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch( msg )
|
||||
{
|
||||
case WM_CHAR:
|
||||
if( wParam == VK_RETURN )
|
||||
{
|
||||
return EditReturnPressed(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return CallWindowProc(old_edit_proc, hwnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
inline void SetMenuLanguageItem(HMENU menu, DWORD menu_id, Languages::GuiMsg msg)
|
||||
{
|
||||
Languages * pLang = GetPrgRes()->GetLanguages();
|
||||
|
||||
ModifyMenu(menu, menu_id, MF_BYCOMMAND|MF_STRING, menu_id, pLang->GuiMessage(msg) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SetPadMenuLanguage(HWND hWnd)
|
||||
{
|
||||
HMENU menu = GetMenu(hWnd);
|
||||
|
||||
if( !menu )
|
||||
return;
|
||||
|
||||
MENUITEMINFO mi;
|
||||
mi.cbSize = sizeof(mi);
|
||||
mi.fMask = MIIM_TYPE;
|
||||
mi.fType = MFT_STRING;
|
||||
|
||||
// on popup menus we're using indexes because they don't want to work correctly
|
||||
// with the identifiers
|
||||
mi.dwTypeData = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::pad_menu_file) );
|
||||
SetMenuItemInfo(menu, MENUPAD_FILE_INDEX, true, &mi);
|
||||
|
||||
mi.dwTypeData = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::pad_menu_edit) );
|
||||
SetMenuItemInfo(menu, MENUPAD_EDIT_INDEX, true, &mi);
|
||||
|
||||
SetMenuLanguageItem(menu, MENUPAD_FILE_OPEN, Languages::pad_menu_file_open);
|
||||
SetMenuLanguageItem(menu, MENUPAD_FILE_SAVE, Languages::pad_menu_file_saveas);
|
||||
SetMenuLanguageItem(menu, MENUPAD_FILE_CLOSE, Languages::pad_menu_file_close);
|
||||
SetMenuLanguageItem(menu, MENUPAD_EDIT_UNDO, Languages::pad_menu_edit_undo);
|
||||
SetMenuLanguageItem(menu, MENUPAD_EDIT_CUT, Languages::pad_menu_edit_cut);
|
||||
SetMenuLanguageItem(menu, MENUPAD_EDIT_COPY, Languages::pad_menu_edit_copy);
|
||||
SetMenuLanguageItem(menu, MENUPAD_EDIT_PASTE, Languages::pad_menu_edit_paste);
|
||||
SetMenuLanguageItem(menu, MENUPAD_EDIT_DEL, Languages::pad_menu_edit_del);
|
||||
SetMenuLanguageItem(menu, MENUPAD_EDIT_SELECTALL, Languages::pad_menu_edit_select_all);
|
||||
|
||||
DrawMenuBar(hWnd);
|
||||
}
|
||||
|
||||
|
||||
LRESULT PadCreate(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
edit = CreateWindow("edit", "",
|
||||
WS_VISIBLE | WS_CHILD | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL,
|
||||
0, 0, 100, 100, hwnd, 0, GetPrgRes()->GetInstance(), 0);
|
||||
|
||||
if( !edit )
|
||||
return 0;
|
||||
|
||||
GetPrgRes()->SetPadEdit(edit);
|
||||
|
||||
old_edit_proc = (WNDPROC)SetWindowLong(edit, GWL_WNDPROC, (LONG)EditSubclass);
|
||||
|
||||
// 65535 - 64KB
|
||||
// we're using some kind of messages which operates only on 64KB
|
||||
SendMessage(edit, EM_SETLIMITTEXT, 65535 - 5, 0);
|
||||
|
||||
if( font != 0 )
|
||||
SendMessage(edit, WM_SETFONT, (WPARAM)font, 0);
|
||||
|
||||
SetPadLanguage();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
LRESULT PadMove(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
RECT r;
|
||||
|
||||
GetWindowRect(hwnd,&r);
|
||||
|
||||
GetPrgRes()->SetPadXPos( r.left );
|
||||
GetPrgRes()->SetPadYPos( r.top );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
LRESULT PadSize(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
// client coordinates
|
||||
int cx = LOWORD(lParam);
|
||||
int cy = HIWORD(lParam);
|
||||
int fwSizeType = int(wParam);
|
||||
RECT r;
|
||||
|
||||
|
||||
if( fwSizeType == SIZE_MAXIMIZED )
|
||||
GetPrgRes()->SetPadMaximized(true);
|
||||
else
|
||||
if( fwSizeType == SIZE_RESTORED )
|
||||
GetPrgRes()->SetPadMaximized(false);
|
||||
|
||||
MoveWindow(edit, 0, 0, cx, cy, true);
|
||||
|
||||
if( fwSizeType != SIZE_MINIMIZED && fwSizeType != SIZE_MAXIMIZED )
|
||||
{
|
||||
GetWindowRect(hwnd, &r);
|
||||
GetPrgRes()->SetPadXSize( r.right - r.left );
|
||||
GetPrgRes()->SetPadYSize( r.bottom - r.top );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
LRESULT PadClose(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
GetPrgRes()->ShowPad( false );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
LRESULT PadFocus(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
SetFocus(edit);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool OpenDialog(HWND hwnd)
|
||||
{
|
||||
OPENFILENAME o;
|
||||
char buf[MAX_PATH];
|
||||
|
||||
buf[0] = 0;
|
||||
|
||||
o.lStructSize = sizeof(o);
|
||||
o.hwndOwner = hwnd;
|
||||
o.hInstance = GetPrgRes()->GetInstance();
|
||||
o.lpstrFilter = "*.*\0*.*\0";
|
||||
o.lpstrCustomFilter = 0;
|
||||
o.nMaxCustFilter = 0;
|
||||
o.nFilterIndex = 1;
|
||||
o.lpstrFile = buf;
|
||||
o.nMaxFile = MAX_PATH;
|
||||
o.lpstrFileTitle = 0;
|
||||
o.nMaxFileTitle = 0;
|
||||
o.lpstrInitialDir = 0;
|
||||
o.lpstrTitle = 0;
|
||||
o.Flags = OFN_PATHMUSTEXIST;
|
||||
o.nFileOffset = 0;
|
||||
o.nFileExtension = 0;
|
||||
o.lpstrDefExt = 0;
|
||||
o.lCustData = 0;
|
||||
o.lpfnHook = 0;
|
||||
o.lpTemplateName = 0;
|
||||
|
||||
|
||||
if( GetOpenFileName(&o) )
|
||||
{
|
||||
file_name = buf;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// testing files which have only one 10 at the end of a line (unix mode)
|
||||
void CorrectUnixMode()
|
||||
{
|
||||
bool was_r = false;
|
||||
|
||||
for(size_t i=0 ; i<res.size() ; ++i)
|
||||
{
|
||||
if( res[i]==10 && !was_r )
|
||||
{
|
||||
res.insert(res.begin()+i, 13);
|
||||
++i;
|
||||
}
|
||||
else
|
||||
{
|
||||
was_r = res[i] == 13;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LoadFromFile(HWND hwnd, std::ifstream & file)
|
||||
{
|
||||
char buf[64];
|
||||
std::streamsize size;
|
||||
|
||||
res.clear();
|
||||
|
||||
do
|
||||
{
|
||||
file.read(buf, sizeof(buf)-1);
|
||||
|
||||
size = file.gcount();
|
||||
buf[size] = 0;
|
||||
res += buf;
|
||||
}
|
||||
while( !file.eof() );
|
||||
|
||||
CorrectUnixMode();
|
||||
SetWindowText(edit, res.c_str());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
LRESULT PadOpen(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if( !OpenDialog(hwnd) )
|
||||
return 0;
|
||||
|
||||
|
||||
std::ifstream file(file_name.c_str(), std::ios_base::in | std::ios_base::binary);
|
||||
Languages * lang = GetPrgRes()->GetLanguages();
|
||||
|
||||
if( !file )
|
||||
{
|
||||
MessageBox(hwnd, lang->GuiMessage(Languages::cannot_open_file),
|
||||
lang->GuiMessage(Languages::message_box_error_caption), MB_ICONERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
file.seekg(0, std::ios::end);
|
||||
std::ifstream::pos_type pos = file.tellg();
|
||||
|
||||
if( pos > 65530 )
|
||||
{
|
||||
MessageBox(hwnd, lang->GuiMessage(Languages::file_too_long),
|
||||
lang->GuiMessage(Languages::message_box_error_caption), MB_ICONERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
file.seekg(0);
|
||||
LoadFromFile(hwnd, file);
|
||||
|
||||
file.close();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool SaveDialog(HWND hwnd)
|
||||
{
|
||||
OPENFILENAME o;
|
||||
char buf[MAX_PATH];
|
||||
|
||||
sprintf(buf, "ttcalc.txt");
|
||||
|
||||
o.lStructSize = sizeof(o);
|
||||
o.hwndOwner = hwnd;
|
||||
o.hInstance = GetPrgRes()->GetInstance();
|
||||
o.lpstrFilter = "*.*\0*.*\0";
|
||||
o.lpstrCustomFilter = 0;
|
||||
o.nMaxCustFilter = 0;
|
||||
o.nFilterIndex = 1;
|
||||
o.lpstrFile = buf;
|
||||
o.nMaxFile = MAX_PATH;
|
||||
o.lpstrFileTitle = 0;
|
||||
o.nMaxFileTitle = 0;
|
||||
o.lpstrInitialDir = 0;
|
||||
o.lpstrTitle = 0;
|
||||
o.Flags = OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST;
|
||||
o.nFileOffset = 0;
|
||||
o.nFileExtension = 0;
|
||||
o.lpstrDefExt = 0;
|
||||
o.lCustData = 0;
|
||||
o.lpfnHook = 0;
|
||||
o.lpTemplateName = 0;
|
||||
|
||||
|
||||
if( GetSaveFileName(&o) )
|
||||
{
|
||||
file_name = buf;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void SaveBuffer(HWND hwnd, const char * buf)
|
||||
{
|
||||
std::ofstream file(file_name.c_str(), std::ios_base::out | std::ios_base::binary);
|
||||
|
||||
if( !file )
|
||||
{
|
||||
Languages * lang = GetPrgRes()->GetLanguages();
|
||||
MessageBox(hwnd, lang->GuiMessage(Languages::cannot_save_file),
|
||||
lang->GuiMessage(Languages::message_box_error_caption), MB_ICONERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
for( ; *buf ; ++buf )
|
||||
file.put(*buf);
|
||||
|
||||
file.close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
LRESULT PadSave(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if( !SaveDialog(hwnd) )
|
||||
return 0;
|
||||
|
||||
Languages * lang = GetPrgRes()->GetLanguages();
|
||||
HLOCAL handle = (HLOCAL)SendMessage(edit, EM_GETHANDLE, 0, 0);
|
||||
|
||||
if( handle == 0 )
|
||||
{
|
||||
MessageBox(hwnd, lang->GuiMessage(Languages::other_error),
|
||||
lang->GuiMessage(Languages::message_box_error_caption), MB_ICONERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char * buf = (const char*)LocalLock(handle);
|
||||
|
||||
if( buf )
|
||||
SaveBuffer(hwnd, buf);
|
||||
else
|
||||
MessageBox(hwnd, lang->GuiMessage(Languages::other_error),
|
||||
lang->GuiMessage(Languages::message_box_error_caption), MB_ICONERROR);
|
||||
|
||||
LocalUnlock(handle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
LRESULT PadNew(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
SetWindowText(edit, "");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
LRESULT PadUndo(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
SendMessage(edit, WM_UNDO, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT PadCut(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
SendMessage(edit, WM_CUT, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
LRESULT PadCopy(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
SendMessage(edit, WM_COPY, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
LRESULT PadPaste(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
SendMessage(edit, WM_PASTE, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
LRESULT PadDel(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
SendMessage(edit, EM_REPLACESEL, true, (LPARAM)"");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
LRESULT PadSelectAll(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
SendMessage(edit, EM_SETSEL, 0, -1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void PadInitMenuEdit(HMENU menu)
|
||||
{
|
||||
DWORD sel_start, sel_end;
|
||||
bool can_undo = SendMessage(edit, EM_CANUNDO, 0 ,0);
|
||||
|
||||
if( can_undo )
|
||||
EnableMenuItem(menu,MENUPAD_EDIT_UNDO,MF_BYCOMMAND | MF_ENABLED);
|
||||
else
|
||||
EnableMenuItem(menu,MENUPAD_EDIT_UNDO,MF_BYCOMMAND | MF_GRAYED);
|
||||
|
||||
|
||||
SendMessage(edit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
|
||||
|
||||
if( sel_start == sel_end )
|
||||
{
|
||||
EnableMenuItem(menu,MENUPAD_EDIT_CUT, MF_BYCOMMAND | MF_GRAYED);
|
||||
EnableMenuItem(menu,MENUPAD_EDIT_COPY,MF_BYCOMMAND | MF_GRAYED);
|
||||
EnableMenuItem(menu,MENUPAD_EDIT_DEL, MF_BYCOMMAND | MF_GRAYED);
|
||||
}
|
||||
else
|
||||
{
|
||||
EnableMenuItem(menu,MENUPAD_EDIT_CUT, MF_BYCOMMAND | MF_ENABLED);
|
||||
EnableMenuItem(menu,MENUPAD_EDIT_COPY,MF_BYCOMMAND | MF_ENABLED);
|
||||
EnableMenuItem(menu,MENUPAD_EDIT_DEL, MF_BYCOMMAND | MF_ENABLED);
|
||||
}
|
||||
|
||||
if( IsClipboardFormatAvailable(CF_TEXT) )
|
||||
EnableMenuItem(menu,MENUPAD_EDIT_PASTE,MF_BYCOMMAND | MF_ENABLED);
|
||||
else
|
||||
EnableMenuItem(menu,MENUPAD_EDIT_PASTE,MF_BYCOMMAND | MF_GRAYED);
|
||||
}
|
||||
|
||||
|
||||
LRESULT PadInitMenuPopUp(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HMENU menu = (HMENU) wParam;
|
||||
int index = LOWORD(lParam);
|
||||
|
||||
if( index == MENUPAD_EDIT_INDEX )
|
||||
PadInitMenuEdit(menu);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CreatePadCommandTable(Messages<LRESULT> & messages)
|
||||
{
|
||||
messages.Associate(MENUPAD_FILE_NEW, PadNew);
|
||||
messages.Associate(MENUPAD_FILE_OPEN, PadOpen);
|
||||
messages.Associate(MENUPAD_FILE_SAVE, PadSave);
|
||||
messages.Associate(MENUPAD_FILE_CLOSE, PadClose);
|
||||
messages.Associate(MENUPAD_EDIT_UNDO, PadUndo);
|
||||
messages.Associate(MENUPAD_EDIT_CUT, PadCut);
|
||||
messages.Associate(MENUPAD_EDIT_COPY, PadCopy);
|
||||
messages.Associate(MENUPAD_EDIT_PASTE, PadPaste);
|
||||
messages.Associate(MENUPAD_EDIT_DEL, PadDel);
|
||||
messages.Associate(MENUPAD_EDIT_SELECTALL, PadSelectAll);
|
||||
}
|
||||
|
||||
|
||||
|
||||
LRESULT PadCommand(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static Messages<LRESULT> messages;
|
||||
bool method_exists;
|
||||
LRESULT res;
|
||||
|
||||
if( messages.Empty() )
|
||||
// initiation
|
||||
CreatePadCommandTable(messages);
|
||||
|
||||
res = messages.Call(LOWORD(wParam), hwnd, msg, wParam, lParam, &method_exists);
|
||||
|
||||
if( !method_exists )
|
||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
void CreatePadMessagesTable(Messages<LRESULT> & messages)
|
||||
{
|
||||
messages.Associate(WM_CREATE, PadCreate);
|
||||
messages.Associate(WM_MOVE, PadMove);
|
||||
messages.Associate(WM_SIZE, PadSize);
|
||||
messages.Associate(WM_CLOSE, PadClose);
|
||||
messages.Associate(WM_SETFOCUS, PadFocus);
|
||||
messages.Associate(WM_COMMAND, PadCommand);
|
||||
messages.Associate(WM_INITMENUPOPUP, PadInitMenuPopUp);
|
||||
}
|
||||
|
||||
|
||||
LRESULT CALLBACK WindowPadProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static Messages<LRESULT> messages;
|
||||
bool method_exists;
|
||||
LRESULT res;
|
||||
|
||||
if( messages.Empty() )
|
||||
// initiation
|
||||
CreatePadMessagesTable(messages);
|
||||
|
||||
res = messages.Call(msg, hwnd, msg, wParam, lParam, &method_exists);
|
||||
|
||||
if( !method_exists )
|
||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
ATOM RegisterPadClass(const char * ttcalc_pad_class_name)
|
||||
{
|
||||
WNDCLASS w;
|
||||
|
||||
w.style = 0;
|
||||
w.lpfnWndProc = WindowPadProc;
|
||||
w.cbClsExtra = 0;
|
||||
w.cbWndExtra = 0;
|
||||
w.hInstance = GetPrgRes()->GetInstance();
|
||||
w.hIcon = LoadIcon(GetPrgRes()->GetInstance(), MAKEINTRESOURCE(IDI_ICON2));
|
||||
w.hCursor = 0;
|
||||
w.hbrBackground = (HBRUSH)(COLOR_BACKGROUND+1);
|
||||
w.lpszMenuName = MAKEINTRESOURCE(IDR_MENU2);
|
||||
w.lpszClassName = ttcalc_pad_class_name;
|
||||
|
||||
return RegisterClass(&w);
|
||||
}
|
||||
|
||||
|
||||
} // namespace Pad
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool CreatePadWindow()
|
||||
{
|
||||
using namespace Pad;
|
||||
|
||||
static char ttcalc_pad_class_name[] = "TTCalcPadWindow";
|
||||
ATOM a = RegisterPadClass(ttcalc_pad_class_name);
|
||||
|
||||
if( a == 0 )
|
||||
return false;
|
||||
|
||||
bool pad_maximized_from_file = GetPrgRes()->GetPadMaximized();
|
||||
// CreateWindow() would change maximizing
|
||||
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
|
||||
font = CreateFont(0, 0, 0, 0, FW_NORMAL, false, false, false,
|
||||
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
|
||||
DEFAULT_QUALITY, DEFAULT_PITCH, "Ms Shell Dlg");
|
||||
|
||||
|
||||
HWND pad = CreateWindowEx(WS_EX_CLIENTEDGE, ttcalc_pad_class_name,
|
||||
pl->GuiMessage(Languages::pad_title),
|
||||
WS_OVERLAPPEDWINDOW | WS_POPUPWINDOW ,
|
||||
GetPrgRes()->GetPadXPos(), GetPrgRes()->GetPadYPos(),
|
||||
GetPrgRes()->GetPadXSize(), GetPrgRes()->GetPadYSize(),
|
||||
0 /*GetPrgRes()->GetMainWindow()*/, 0, GetPrgRes()->GetInstance(), 0);
|
||||
|
||||
GetPrgRes()->SetPadWindow(pad);
|
||||
SetPadLanguage();
|
||||
GetPrgRes()->SetPadMaximized( pad_maximized_from_file );
|
||||
GetPrgRes()->ShowPad( GetPrgRes()->IsPadVisible() );
|
||||
|
||||
return pad!=0 && edit!=0;
|
||||
}
|
||||
|
||||
|
||||
void DestroyPadWindow()
|
||||
{
|
||||
using namespace Pad;
|
||||
|
||||
DeleteObject(font);
|
||||
}
|
||||
|
||||
|
||||
void SetPadLanguage()
|
||||
{
|
||||
using namespace Pad;
|
||||
|
||||
HWND pad = GetPrgRes()->GetPadWindow();
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
|
||||
SetPadMenuLanguage(pad);
|
||||
SetWindowText(pad, pl->GuiMessage(Languages::pad_title));
|
||||
}
|
||||
|
48
src/pad.h
48
src/pad.h
|
@ -1,48 +0,0 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name Tomasz Sowa nor the names of contributors to this
|
||||
* project may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef headerfilepad
|
||||
#define headerfilepad
|
||||
|
||||
|
||||
|
||||
bool CreatePadWindow();
|
||||
void DestroyPadWindow();
|
||||
void SetPadLanguage();
|
||||
|
||||
|
||||
#endif
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -42,9 +42,14 @@
|
|||
|
||||
|
||||
|
||||
ParserManager::ParserManager() : buffer_len(20480)
|
||||
ParserManager::ParserManager() : buffer_len(2048)
|
||||
{
|
||||
buffer = 0;
|
||||
base_input = base_output = 10;
|
||||
always_scientific = 0;
|
||||
when_scientific = 15;
|
||||
rounding = -1;
|
||||
remove_zeroes = true;
|
||||
last_variables_id = 0;
|
||||
last_functions_id = 0;
|
||||
}
|
||||
|
@ -52,7 +57,15 @@ ParserManager::ParserManager() : buffer_len(20480)
|
|||
|
||||
ParserManager::ParserManager(const ParserManager & p) : buffer_len(p.buffer_len)
|
||||
{
|
||||
buffer = 0;
|
||||
buffer = 0;
|
||||
base_input = p.base_input;
|
||||
base_output = p.base_output;
|
||||
always_scientific = p.always_scientific;
|
||||
when_scientific = p.when_scientific;
|
||||
rounding = p.rounding;
|
||||
remove_zeroes = p.remove_zeroes;
|
||||
last_variables_id = p.last_variables_id;
|
||||
last_functions_id = p.last_functions_id;
|
||||
}
|
||||
|
||||
|
||||
|
@ -76,8 +89,6 @@ ttmath::ErrorCode ParserManager::GetLastCode()
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
ttmath::ErrorCode ParserManager::Parse()
|
||||
{
|
||||
try
|
||||
|
@ -87,21 +98,29 @@ ttmath::ErrorCode ParserManager::Parse()
|
|||
switch( precision )
|
||||
{
|
||||
case 0:
|
||||
Parse(parser1);
|
||||
parser1.SetBase(base_input);
|
||||
parser1.SetDegRadGrad(angle_deg_rad_grad);
|
||||
code = parser1.Parse(buffer);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
Parse(parser2);
|
||||
parser2.SetBase(base_input);
|
||||
parser2.SetDegRadGrad(angle_deg_rad_grad);
|
||||
code = parser2.Parse(buffer);
|
||||
break;
|
||||
|
||||
default:
|
||||
Parse(parser3);
|
||||
parser3.SetBase(base_input);
|
||||
parser3.SetDegRadGrad(angle_deg_rad_grad);
|
||||
code = parser3.Parse(buffer);
|
||||
break;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
Parse(parser1);
|
||||
parser1.SetBase(base_input);
|
||||
parser1.SetDegRadGrad(angle_deg_rad_grad);
|
||||
code = parser1.Parse(buffer);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
@ -139,9 +158,10 @@ unsigned int i;
|
|||
last_functions_id = GetPrgRes()->GetFunctionsId();
|
||||
}
|
||||
|
||||
//
|
||||
base_input = GetPrgRes()->GetBaseInput();
|
||||
base_output = GetPrgRes()->GetBaseOutput();
|
||||
|
||||
base_input = GetPrgRes()->GetBaseInput();
|
||||
base_output = GetPrgRes()->GetBaseOutput();
|
||||
always_scientific = GetPrgRes()->GetDisplayAlwaysScientific();
|
||||
when_scientific = GetPrgRes()->GetDisplayWhenScientific();
|
||||
rounding = GetPrgRes()->GetDisplayRounding();
|
||||
|
@ -149,15 +169,14 @@ unsigned int i;
|
|||
remove_zeroes = GetPrgRes()->GetRemovingZeroes();
|
||||
angle_deg_rad_grad = GetPrgRes()->GetDegRadGrad();
|
||||
country = GetPrgRes()->GetLanguages()->GetCurrentLanguage();
|
||||
decimal_point = GetPrgRes()->GetDecimalPointChar();
|
||||
grouping = GetPrgRes()->GetGroupingChar();
|
||||
grouping_digits = GetPrgRes()->GetGroupingDigits();
|
||||
param_sep = GetPrgRes()->GetParamSepChar();
|
||||
|
||||
GetPrgRes()->GetInputDecimalPointChar(&input_comma1, &input_comma2);
|
||||
|
||||
conv_type = GetPrgRes()->GetConvert()->GetCurrentType();
|
||||
GetPrgRes()->GetConvert()->GetCurrentUnit(conv_type, conv_input_unit, conv_output_unit);
|
||||
|
||||
if( GetPrgRes()->GetDecimalPoint() == 0 )
|
||||
decimal_point = '.';
|
||||
else
|
||||
decimal_point = ',';
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -134,15 +134,8 @@ private:
|
|||
int precision;
|
||||
Languages::Country country;
|
||||
ttmath::ErrorCode code;
|
||||
int angle_deg_rad_grad;
|
||||
|
||||
char decimal_point;
|
||||
char grouping;
|
||||
char input_comma1;
|
||||
char input_comma2;
|
||||
char param_sep;
|
||||
|
||||
int grouping_digits;
|
||||
int angle_deg_rad_grad;
|
||||
|
||||
/*
|
||||
some buffers which we use in some method in the second thread,
|
||||
|
@ -199,18 +192,7 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
ttmath::Conv conv;
|
||||
|
||||
conv.base = base_output;
|
||||
conv.scient = always_scientific;
|
||||
conv.scient_from = when_scientific;
|
||||
conv.round = rounding;
|
||||
conv.trim_zeroes = remove_zeroes;
|
||||
conv.comma = decimal_point;
|
||||
conv.group = grouping;
|
||||
conv.group_digits = grouping_digits;
|
||||
|
||||
if( result.ToString(buffer2, conv) )
|
||||
if( result.ToString(buffer2,base_output, always_scientific, when_scientific, rounding, remove_zeroes, decimal_point) )
|
||||
{
|
||||
// we shouldn't have had this error in the new version of ToStrign(...)
|
||||
// (where we're using a bigger type for calculating)
|
||||
|
@ -226,7 +208,7 @@ private:
|
|||
AddOutputSuffix(buffer1);
|
||||
|
||||
if( i < matparser.stack.size()-1 )
|
||||
buffer1 += " ; ";
|
||||
buffer1 += " ";
|
||||
}
|
||||
|
||||
SetDlgItemText(GetPrgRes()->GetMainWindow(),IDC_OUTPUT_EDIT,buffer1.c_str());
|
||||
|
@ -234,18 +216,6 @@ private:
|
|||
return 0;
|
||||
}
|
||||
|
||||
template<class ValueType>
|
||||
void Parse(ttmath::Parser<ValueType> & matparser)
|
||||
{
|
||||
matparser.SetBase(base_input);
|
||||
matparser.SetDegRadGrad(angle_deg_rad_grad);
|
||||
matparser.SetComma(input_comma1, input_comma2);
|
||||
matparser.SetGroup(grouping);
|
||||
matparser.SetParamSep(param_sep);
|
||||
code = matparser.Parse(buffer);
|
||||
}
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -100,50 +100,6 @@ int ProgramResources::GetYSize()
|
|||
return y_size;
|
||||
}
|
||||
|
||||
|
||||
void ProgramResources::SetPadXPos(int x)
|
||||
{
|
||||
pad_x_pos = x;
|
||||
}
|
||||
|
||||
void ProgramResources::SetPadYPos(int y)
|
||||
{
|
||||
pad_y_pos = y;
|
||||
}
|
||||
|
||||
int ProgramResources::GetPadXPos()
|
||||
{
|
||||
return pad_x_pos;
|
||||
}
|
||||
|
||||
int ProgramResources::GetPadYPos()
|
||||
{
|
||||
return pad_y_pos;
|
||||
}
|
||||
|
||||
void ProgramResources::SetPadXSize(int x)
|
||||
{
|
||||
pad_x_size = x;
|
||||
}
|
||||
|
||||
void ProgramResources::SetPadYSize(int y)
|
||||
{
|
||||
pad_y_size = y;
|
||||
}
|
||||
|
||||
int ProgramResources::GetPadXSize()
|
||||
{
|
||||
return pad_x_size;
|
||||
}
|
||||
|
||||
int ProgramResources::GetPadYSize()
|
||||
{
|
||||
return pad_y_size;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void ProgramResources::SetYSizeNormal(int y)
|
||||
{
|
||||
y_size_normal = y;
|
||||
|
@ -195,6 +151,11 @@ ProgramResources::View ProgramResources::GetView()
|
|||
void ProgramResources::SetMaximized(bool max)
|
||||
{
|
||||
maximized = max;
|
||||
|
||||
if( maximized )
|
||||
ShowWindow(main_window, SW_SHOWMAXIMIZED);
|
||||
else
|
||||
ShowWindow(main_window, SW_SHOWNORMAL);
|
||||
}
|
||||
|
||||
|
||||
|
@ -203,42 +164,6 @@ bool ProgramResources::GetMaximized()
|
|||
return maximized;
|
||||
}
|
||||
|
||||
void ProgramResources::SetPadMaximized(bool max)
|
||||
{
|
||||
pad_maximized = max;
|
||||
}
|
||||
|
||||
|
||||
bool ProgramResources::GetPadMaximized()
|
||||
{
|
||||
return pad_maximized;
|
||||
}
|
||||
|
||||
|
||||
void ProgramResources::ShowPad(bool show)
|
||||
{
|
||||
show_pad = show;
|
||||
|
||||
if( show_pad )
|
||||
{
|
||||
if( pad_maximized )
|
||||
ShowWindow(pad_window, SW_SHOWMAXIMIZED);
|
||||
else
|
||||
ShowWindow(pad_window, SW_SHOWNORMAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowWindow(pad_window, SW_HIDE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool ProgramResources::IsPadVisible()
|
||||
{
|
||||
return show_pad;
|
||||
}
|
||||
|
||||
|
||||
void ProgramResources::SetAlwaysOnTop(bool always)
|
||||
{
|
||||
always_on_top = always;
|
||||
|
@ -381,78 +306,8 @@ int ProgramResources::GetDecimalPoint()
|
|||
}
|
||||
|
||||
|
||||
char ProgramResources::GetDecimalPointChar()
|
||||
{
|
||||
char c;
|
||||
|
||||
if( GetDecimalPoint() == 0 )
|
||||
c = '.';
|
||||
else
|
||||
c = ',';
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
char ProgramResources::GetGroupingChar()
|
||||
{
|
||||
char c;
|
||||
|
||||
// grouping
|
||||
static char group_table[] = "\0 `'.,"; // 5 items
|
||||
|
||||
int g = GetGrouping();
|
||||
|
||||
if( g>=0 && g<=5 )
|
||||
c = group_table[g];
|
||||
else
|
||||
c = 0;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
void ProgramResources::GetInputDecimalPointChar(char * comma1, char * comma2)
|
||||
{
|
||||
// input decimal point
|
||||
switch( GetInputDecimalPoint() )
|
||||
{
|
||||
case 0:
|
||||
*comma1 = '.';
|
||||
*comma2 = ',';
|
||||
break;
|
||||
|
||||
case 1:
|
||||
*comma1 = '.';
|
||||
*comma2 = 0;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
default:
|
||||
*comma1 = ',';
|
||||
*comma2 = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
char ProgramResources::GetParamSepChar()
|
||||
{
|
||||
char c;
|
||||
|
||||
// additional param separator
|
||||
static char param_table[] = ";.,"; // 3 items
|
||||
|
||||
int sep = GetParamSep();
|
||||
|
||||
if( sep>=0 && sep<=3 )
|
||||
c = param_table[sep];
|
||||
else
|
||||
c = ';';
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
ttmath::Objects * ProgramResources::GetVariables()
|
||||
{
|
||||
|
@ -521,26 +376,6 @@ HWND ProgramResources::GetMainWindow()
|
|||
return main_window;
|
||||
}
|
||||
|
||||
void ProgramResources::SetPadWindow(HWND h)
|
||||
{
|
||||
pad_window = h;
|
||||
}
|
||||
|
||||
HWND ProgramResources::GetPadWindow()
|
||||
{
|
||||
return pad_window;
|
||||
}
|
||||
|
||||
void ProgramResources::SetPadEdit(HWND h)
|
||||
{
|
||||
pad_edit = h;
|
||||
}
|
||||
|
||||
HWND ProgramResources::GetPadEdit()
|
||||
{
|
||||
return pad_edit;
|
||||
}
|
||||
|
||||
void ProgramResources::SetTabWindow(unsigned int id, HWND h)
|
||||
{
|
||||
if( id >= sizeof(tab_window) / sizeof(HWND) )
|
||||
|
@ -567,11 +402,6 @@ char * ProgramResources::GetBuffer()
|
|||
return buffer;
|
||||
}
|
||||
|
||||
char * ProgramResources::GetBufferTemp()
|
||||
{
|
||||
return buffer_temp;
|
||||
}
|
||||
|
||||
unsigned int ProgramResources::GetBufferSize()
|
||||
{
|
||||
return buffer_size;
|
||||
|
@ -599,115 +429,16 @@ int ProgramResources::GetPrecision()
|
|||
}
|
||||
|
||||
|
||||
void ProgramResources::SetGrouping(int g)
|
||||
{
|
||||
grouping = g;
|
||||
|
||||
if( grouping<0 || grouping>5 )
|
||||
g = 0;
|
||||
}
|
||||
|
||||
|
||||
int ProgramResources::GetGrouping()
|
||||
{
|
||||
return grouping;
|
||||
}
|
||||
|
||||
|
||||
void ProgramResources::SetGroupingDigits(int digits)
|
||||
{
|
||||
grouping_digits = digits;
|
||||
|
||||
if( grouping_digits < 1 || grouping_digits > 9 )
|
||||
grouping_digits = 3; // 3 by default
|
||||
}
|
||||
|
||||
|
||||
int ProgramResources::GetGroupingDigits()
|
||||
{
|
||||
return grouping_digits;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ProgramResources::SetInputDecimalPoint(int p)
|
||||
{
|
||||
input_decimal_point = p;
|
||||
|
||||
if( input_decimal_point<0 || input_decimal_point>2 )
|
||||
decimal_point = 0;
|
||||
}
|
||||
|
||||
|
||||
int ProgramResources::GetInputDecimalPoint()
|
||||
{
|
||||
return input_decimal_point;
|
||||
}
|
||||
|
||||
|
||||
void ProgramResources::SetParamSep(int s)
|
||||
{
|
||||
param_sep = s;
|
||||
|
||||
if( param_sep<0 || param_sep>2 )
|
||||
param_sep = 0;
|
||||
}
|
||||
|
||||
|
||||
int ProgramResources::GetParamSep()
|
||||
{
|
||||
return param_sep;
|
||||
}
|
||||
|
||||
|
||||
void ProgramResources::SetCheckUpdateStartup(bool s)
|
||||
{
|
||||
check_update_startup = s;
|
||||
}
|
||||
|
||||
|
||||
bool ProgramResources::GetCheckUpdateStartup()
|
||||
{
|
||||
return check_update_startup;
|
||||
}
|
||||
|
||||
|
||||
void ProgramResources::SetUpdateExists(bool e)
|
||||
{
|
||||
update_exists = e;
|
||||
}
|
||||
|
||||
|
||||
bool ProgramResources::GetUpdateExists()
|
||||
{
|
||||
return update_exists;
|
||||
}
|
||||
|
||||
|
||||
void ProgramResources::SetLastUpdate(time_t t)
|
||||
{
|
||||
last_update = t;
|
||||
}
|
||||
|
||||
|
||||
time_t ProgramResources::GetLastUpdate()
|
||||
{
|
||||
return last_update;
|
||||
}
|
||||
|
||||
|
||||
|
||||
ProgramResources::ProgramResources()
|
||||
{
|
||||
// if you want to change the input buffer you have to also change
|
||||
// ParserManager::ParserManager() : buffer_len(20480) in parsermanager.cpp
|
||||
buffer_size = 20480;
|
||||
// if you want to change the input buffer you have also to change
|
||||
// ParserManager::ParserManager() : buffer_len(2048) in parsermanager.cpp
|
||||
buffer_size = 2048;
|
||||
|
||||
buffer = new char[buffer_size];
|
||||
buffer[0] = 0;
|
||||
|
||||
buffer_temp = new char[buffer_size];
|
||||
buffer_temp[0] = 0;
|
||||
|
||||
always_on_top = false;
|
||||
view = view_normal;
|
||||
|
@ -718,8 +449,6 @@ ProgramResources::ProgramResources()
|
|||
|
||||
hInstance = 0;
|
||||
main_window = 0;
|
||||
pad_window = 0;
|
||||
pad_edit = 0;
|
||||
|
||||
base_input = 10;
|
||||
base_output = 10;
|
||||
|
@ -737,12 +466,6 @@ ProgramResources::ProgramResources()
|
|||
x_size = 100;
|
||||
y_size = 100;
|
||||
|
||||
pad_x_pos = 30;
|
||||
pad_y_pos = 30;
|
||||
pad_x_size = 600;
|
||||
pad_y_size = 500;
|
||||
pad_maximized = false;
|
||||
|
||||
y_size_normal = 0;
|
||||
y_size_compact = 0;
|
||||
x_size_min = 0;
|
||||
|
@ -753,29 +476,17 @@ ProgramResources::ProgramResources()
|
|||
#endif
|
||||
|
||||
|
||||
decimal_point = 0; // output decimal point
|
||||
decimal_point = 0;
|
||||
angle_deg_rad_grad = 1; // rad is default
|
||||
grouping = 0;
|
||||
grouping_digits = 3;
|
||||
|
||||
input_decimal_point = 0; // dot or comma
|
||||
param_sep = 0;
|
||||
|
||||
variables_id = 0;
|
||||
functions_id = 0;
|
||||
|
||||
show_pad = false;
|
||||
check_update_startup = true;
|
||||
update_exists = false; // for dynamic menu
|
||||
|
||||
last_update = 0;
|
||||
}
|
||||
|
||||
|
||||
ProgramResources::~ProgramResources()
|
||||
{
|
||||
delete [] buffer;
|
||||
delete [] buffer_temp;
|
||||
}
|
||||
|
||||
|
||||
|
@ -841,12 +552,6 @@ return true;
|
|||
}
|
||||
|
||||
|
||||
const std::string & ProgramResources::GetHelpFile()
|
||||
{
|
||||
return help_file;
|
||||
}
|
||||
|
||||
|
||||
bool ProgramResources::ReadTextValueFromRegistry(HKEY main_key, const char * sub_key, const char * value, std::string & result)
|
||||
{
|
||||
HKEY reg_key;
|
||||
|
@ -874,95 +579,61 @@ return status;
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
setting names of:
|
||||
- configuration file
|
||||
- help file
|
||||
*/
|
||||
void ProgramResources::SetNameOfFiles()
|
||||
|
||||
void ProgramResources::SetNameOfConfigurationFile()
|
||||
{
|
||||
char buffer[_MAX_PATH];
|
||||
static const char conf_name[] = "ttcalc.ini";
|
||||
static const char help_name[] = "ttcalc.chm";
|
||||
static const char simple_file_name[] = "ttcalc.ini";
|
||||
|
||||
// if there'll be an error we assume that the current directory will be used
|
||||
configuration_file = ".\\";
|
||||
configuration_file += conf_name;
|
||||
help_file = ".\\";
|
||||
help_file += help_name;
|
||||
// (in the portable version the configuration file is in a current directory)
|
||||
configuration_file = std::string(".\\") + simple_file_name;
|
||||
|
||||
if( !GetCurrentDirectory(_MAX_PATH, buffer) )
|
||||
return;
|
||||
#ifndef TTCALC_PORTABLE
|
||||
|
||||
help_file = buffer;
|
||||
help_file += '\\';
|
||||
help_file += help_name;
|
||||
|
||||
#ifdef TTCALC_PORTABLE
|
||||
static const char simple_directory_name[] = "TTCalc";
|
||||
std::string application_data;
|
||||
|
||||
configuration_file = buffer;
|
||||
configuration_file += '\\';
|
||||
configuration_file += conf_name;
|
||||
|
||||
#else
|
||||
|
||||
static const char dir_name[] = "TTCalc";
|
||||
std::string app_data;
|
||||
|
||||
// we're trying to read the value "AppData" from registry
|
||||
// which can be, for instance, as:
|
||||
// "C:\Documents and Settings\user\data application" on WinNT
|
||||
// or "C:\Windows\Data Application\" on Win9x
|
||||
|
||||
// we don't use SHGetFolderLocation() because it is not available on Win9x
|
||||
|
||||
if( ReadTextValueFromRegistry(
|
||||
HKEY_CURRENT_USER,
|
||||
"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",
|
||||
"AppData",
|
||||
app_data) )
|
||||
application_data) )
|
||||
{
|
||||
std::string app_dir = app_data + '\\' + dir_name;
|
||||
std::string application_directory = application_data + '\\' + simple_directory_name;
|
||||
bool success = false;
|
||||
|
||||
if( CreateDirIfNotExists(app_dir) )
|
||||
configuration_file = app_dir + '\\' + conf_name;
|
||||
// we have to remember the currect directory
|
||||
// (because we're using it when we're opening the help)
|
||||
char * buffer = new char[_MAX_PATH];
|
||||
|
||||
if( GetCurrentDirectory(_MAX_PATH, buffer) )
|
||||
{
|
||||
// we're testing whether we've got our directory or not
|
||||
if( SetCurrentDirectory( application_directory.c_str() ) )
|
||||
success = true;
|
||||
else
|
||||
// now we must create our directory inside it
|
||||
if( CreateDirectory(application_directory.c_str(), 0) )
|
||||
success = true;
|
||||
|
||||
if( success )
|
||||
configuration_file = application_directory + '\\' + simple_file_name;
|
||||
|
||||
SetCurrentDirectory(buffer);
|
||||
}
|
||||
|
||||
delete [] buffer;
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
it is used when 'createconfig' parameter has been passed to the ttcalc program
|
||||
*/
|
||||
void ProgramResources::SetConfigName()
|
||||
{
|
||||
configuration_file = "ttcalc.ini";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool ProgramResources::CreateDirIfNotExists(const std::string & app_dir)
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
if( SetCurrentDirectory( app_dir.c_str() ) )
|
||||
{
|
||||
success = true;
|
||||
}
|
||||
else
|
||||
if( CreateDirectory(app_dir.c_str(), 0) )
|
||||
{
|
||||
success = true;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ProgramResources::CheckCoordinates()
|
||||
{
|
||||
if( x_pos < -50 )
|
||||
|
@ -993,35 +664,6 @@ void ProgramResources::CheckCoordinates()
|
|||
y_pos = cy - y_size;
|
||||
}
|
||||
|
||||
void ProgramResources::CheckPadCoordinates()
|
||||
{
|
||||
if( pad_x_pos < -50 )
|
||||
pad_x_pos = 0;
|
||||
|
||||
if( pad_y_pos < -50 )
|
||||
pad_y_pos = 0;
|
||||
|
||||
if( pad_x_size < 30 )
|
||||
pad_x_size = 600;
|
||||
|
||||
if( pad_y_size < 30 )
|
||||
pad_y_size = 500;
|
||||
|
||||
int cx = GetSystemMetrics(SM_CXSCREEN);
|
||||
int cy = GetSystemMetrics(SM_CYSCREEN);
|
||||
|
||||
if( pad_x_size > cx+10 )
|
||||
pad_x_size = cx;
|
||||
|
||||
if( pad_y_size > cy+10 )
|
||||
pad_y_size = cy;
|
||||
|
||||
if( pad_x_pos > cx-50 )
|
||||
pad_x_pos = cx - pad_x_size;
|
||||
|
||||
if( pad_y_pos > cy-50 )
|
||||
pad_y_pos = cy - pad_y_size;
|
||||
}
|
||||
|
||||
|
||||
void ProgramResources::AddVariablesFunctions( IniParser::Section & temp_variables,
|
||||
|
@ -1099,14 +741,12 @@ return err;
|
|||
|
||||
|
||||
|
||||
|
||||
IniParser::Error ProgramResources::ReadFromFile()
|
||||
{
|
||||
IniParser iparser;
|
||||
IniParser::Section temp_variables, temp_functions;
|
||||
IniParser::Section::iterator ic;
|
||||
std::string ini_value[30];
|
||||
std::string language_setup;
|
||||
std::string ini_value[20];
|
||||
|
||||
iparser.ConvertValueToSmallLetters(false);
|
||||
iparser.SectionCaseSensitive(false);
|
||||
|
@ -1114,7 +754,6 @@ std::string language_setup;
|
|||
// we have variables and functions case-sensitive
|
||||
iparser.PatternCaseSensitive(true);
|
||||
|
||||
iparser.Associate( "global|language.setup", &language_setup );
|
||||
iparser.Associate( "global|always.on.top", &ini_value[0] );
|
||||
iparser.Associate( "global|view", &ini_value[1] );
|
||||
iparser.Associate( "global|maximized", &ini_value[2] );
|
||||
|
@ -1129,21 +768,9 @@ std::string language_setup;
|
|||
iparser.Associate( "global|disp.rounding", &ini_value[11] );
|
||||
iparser.Associate( "global|size.y", &ini_value[12] );
|
||||
iparser.Associate( "global|language", &ini_value[13] );
|
||||
iparser.Associate( "global|disp.output_comma", &ini_value[14] );
|
||||
iparser.Associate( "global|disp.dec.point", &ini_value[14] );
|
||||
iparser.Associate( "global|disp.remove.zeroes", &ini_value[15] );
|
||||
iparser.Associate( "global|disp.deg_rad_grad", &ini_value[16] );
|
||||
iparser.Associate( "global|pad.x", &ini_value[17] );
|
||||
iparser.Associate( "global|pad.y", &ini_value[18] );
|
||||
iparser.Associate( "global|pad.size.x", &ini_value[19] );
|
||||
iparser.Associate( "global|pad.size.y", &ini_value[20] );
|
||||
iparser.Associate( "global|pad.maximized", &ini_value[21] );
|
||||
iparser.Associate( "global|pad", &ini_value[22] );
|
||||
iparser.Associate( "global|disp.grouping", &ini_value[23] );
|
||||
iparser.Associate( "global|disp.input_comma", &ini_value[24] );
|
||||
iparser.Associate( "global|disp.param_sep", &ini_value[25] );
|
||||
iparser.Associate( "global|update.onstartup", &ini_value[26] );
|
||||
iparser.Associate( "global|update.last", &ini_value[27] );
|
||||
iparser.Associate( "global|disp.grouping.digits", &ini_value[28] );
|
||||
|
||||
iparser.Associate( "variables", &temp_variables );
|
||||
iparser.Associate( "functions", &temp_functions );
|
||||
|
@ -1154,94 +781,58 @@ std::string language_setup;
|
|||
if( err == IniParser::err_cant_open_file )
|
||||
return err;
|
||||
|
||||
AddVariablesFunctions(temp_variables, temp_functions, false);
|
||||
|
||||
// we're setting various values
|
||||
always_on_top = bool( atoi(ini_value[0].c_str()) );
|
||||
view = atoi(ini_value[1].c_str()) == 0 ? view_normal : view_compact;
|
||||
maximized = bool( atoi(ini_value[2].c_str()) );
|
||||
|
||||
x_pos = atoi( ini_value[3].c_str() );
|
||||
y_pos = atoi( ini_value[4].c_str() );
|
||||
x_size = atoi( ini_value[5].c_str() );
|
||||
y_size = atoi( ini_value[12].c_str() );
|
||||
CheckCoordinates();
|
||||
|
||||
SetPrecision( atoi(ini_value[6].c_str()) );
|
||||
SetBaseInput( atoi(ini_value[7].c_str()) );
|
||||
SetBaseOutput( atoi(ini_value[8].c_str()) );
|
||||
|
||||
SetDisplayAlwaysScientific( bool(atoi(ini_value[9].c_str())) );
|
||||
SetDisplayWhenScientific( atoi(ini_value[10].c_str()) );
|
||||
SetDisplayRounding( atoi(ini_value[11].c_str()) );
|
||||
SetRemovingZeroes( bool(atoi(ini_value[15].c_str())) );
|
||||
|
||||
if( ini_value[13] == "6" )
|
||||
languages.SetCurrentLanguage(Languages::swe);
|
||||
else
|
||||
if( ini_value[13] == "5" )
|
||||
languages.SetCurrentLanguage(Languages::ru);
|
||||
else
|
||||
if( ini_value[13] == "4" )
|
||||
languages.SetCurrentLanguage(Languages::chn);
|
||||
else
|
||||
if( ini_value[13] == "3" )
|
||||
languages.SetCurrentLanguage(Languages::da);
|
||||
else
|
||||
if( ini_value[13] == "2" )
|
||||
languages.SetCurrentLanguage(Languages::sp);
|
||||
else
|
||||
if( ini_value[13] == "1" )
|
||||
languages.SetCurrentLanguage(Languages::pl);
|
||||
else
|
||||
languages.SetCurrentLanguage(Languages::en);
|
||||
|
||||
SetDecimalPoint( atoi(ini_value[14].c_str()) );
|
||||
SetDegRadGrad( atoi(ini_value[16].c_str()) );
|
||||
|
||||
if( err != IniParser::err_ok )
|
||||
bad_line = iparser.GetBadLine();
|
||||
|
||||
AddVariablesFunctions(temp_variables, temp_functions, false);
|
||||
|
||||
// the first file is created by the installer and has only language.setup option
|
||||
// if the rest options are not set then we are not calling ReadGlobalSection()
|
||||
if( IsGlobalSectionSet(ini_value, sizeof(ini_value)/sizeof(std::string)) )
|
||||
ReadGlobalSection(ini_value);
|
||||
|
||||
if( !language_setup.empty() )
|
||||
languages.SelectCurrentLanguage(language_setup); // we don't have to remember this variable
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int ProgramResources::Int(const std::string & text)
|
||||
{
|
||||
return atoi(text.c_str());
|
||||
}
|
||||
|
||||
|
||||
bool ProgramResources::IsGlobalSectionSet(std::string * ini_value, size_t len)
|
||||
{
|
||||
for(size_t i=0 ; i<len ; ++i)
|
||||
if( !ini_value[i].empty() )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ProgramResources::ReadGlobalSection(std::string * ini_value)
|
||||
{
|
||||
always_on_top = Int(ini_value[0]) == 1;
|
||||
view = Int(ini_value[1]) == 0 ? view_normal : view_compact;
|
||||
maximized = Int(ini_value[2]) == 1;
|
||||
|
||||
x_pos = Int( ini_value[3] );
|
||||
y_pos = Int( ini_value[4] );
|
||||
x_size = Int( ini_value[5] );
|
||||
y_size = Int( ini_value[12] );
|
||||
CheckCoordinates();
|
||||
|
||||
SetPrecision( Int(ini_value[6]) );
|
||||
SetBaseInput( Int(ini_value[7]) );
|
||||
SetBaseOutput( Int(ini_value[8]) );
|
||||
|
||||
SetDisplayAlwaysScientific( Int(ini_value[9]) == 1 );
|
||||
SetDisplayWhenScientific( Int(ini_value[10]) );
|
||||
SetDisplayRounding( Int(ini_value[11]) );
|
||||
|
||||
languages.SetCurrentLanguage((Languages::Country)Int(ini_value[13]));
|
||||
SetDecimalPoint( Int(ini_value[14]) );
|
||||
|
||||
// remove zeroes - if there is not in the config then will be true by default
|
||||
// (from the constructor)
|
||||
if( !ini_value[15].empty() )
|
||||
SetRemovingZeroes( Int(ini_value[15]) == 1 );
|
||||
|
||||
SetDegRadGrad( Int(ini_value[16]) );
|
||||
|
||||
pad_x_pos = Int( ini_value[17] );
|
||||
pad_y_pos = Int( ini_value[18] );
|
||||
pad_x_size = Int( ini_value[19] );
|
||||
pad_y_size = Int( ini_value[20] );
|
||||
pad_maximized = Int(ini_value[21]) == 1;
|
||||
show_pad = Int(ini_value[22]) == 1;
|
||||
CheckPadCoordinates();
|
||||
|
||||
SetGrouping( Int(ini_value[23]) );
|
||||
SetInputDecimalPoint( Int(ini_value[24]) );
|
||||
SetParamSep( Int(ini_value[25]) );
|
||||
|
||||
// check update once a three day - true by default (if there is not in the config)
|
||||
// (default from the constructor)
|
||||
if( !ini_value[26].empty() )
|
||||
check_update_startup = Int(ini_value[26]) == 1;
|
||||
|
||||
last_update = (time_t)atol(ini_value[27].c_str());
|
||||
SetGroupingDigits( Int(ini_value[28]) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void ProgramResources::SaveToFile()
|
||||
{
|
||||
|
@ -1255,36 +846,24 @@ std::ofstream file( configuration_file.c_str() );
|
|||
|
||||
file << "always.on.top = " << (int)always_on_top << std::endl;
|
||||
file << "view = " << (int)view << std::endl;
|
||||
file << "language = " << (int)languages.GetCurrentLanguage()
|
||||
<< std::endl;
|
||||
file << "maximized = " << (int)maximized << std::endl;
|
||||
file << "x = " << x_pos << std::endl;
|
||||
file << "y = " << y_pos << std::endl;
|
||||
file << "size.x = " << x_size << std::endl;
|
||||
file << "size.y = " << y_size << std::endl;
|
||||
file << "maximized = " << (int)maximized << std::endl;
|
||||
file << "update.onstartup = " << (int)check_update_startup << std::endl;
|
||||
file << "update.last = " << (long)last_update << std::endl;
|
||||
file << "pad = " << (int)show_pad << std::endl;
|
||||
file << "pad.x = " << pad_x_pos << std::endl;
|
||||
file << "pad.y = " << pad_y_pos << std::endl;
|
||||
file << "pad.size.x = " << pad_x_size << std::endl;
|
||||
file << "pad.size.y = " << pad_y_size << std::endl;
|
||||
file << "pad.maximized = " << (int)pad_maximized << std::endl;
|
||||
file << "precision = " << precision << std::endl;
|
||||
file << "disp.input = " << base_input << std::endl;
|
||||
file << "disp.output = " << base_output << std::endl;
|
||||
file << "language = " << static_cast<int>(languages.GetCurrentLanguage())
|
||||
<< std::endl;
|
||||
|
||||
file << "disp.alw.scientific = " << (int)display_always_scientific << std::endl;
|
||||
file << "disp.when.scientific = " << display_when_scientific << std::endl;
|
||||
file << "disp.rounding = " << display_rounding << std::endl;
|
||||
file << "disp.remove.zeroes = " << (int)remove_zeroes << std::endl;
|
||||
file << "disp.input_comma = " << input_decimal_point << std::endl;
|
||||
file << "disp.output_comma = " << decimal_point << std::endl;
|
||||
file << "disp.dec.point = " << decimal_point << std::endl;
|
||||
file << "disp.deg_rad_grad = " << angle_deg_rad_grad << std::endl;
|
||||
file << "disp.grouping = " << grouping << std::endl;
|
||||
file << "disp.grouping.digits = " << grouping_digits << std::endl;
|
||||
file << "disp.param_sep = " << param_sep << std::endl;
|
||||
|
||||
|
||||
|
||||
file << "\n[variables]\n";
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -43,30 +43,16 @@
|
|||
\brief various kinds of objects using by the application
|
||||
*/
|
||||
|
||||
#include "compileconfig.h"
|
||||
#include <ttmath/ttmathobjects.h>
|
||||
#include "iniparser.h"
|
||||
#include "languages.h"
|
||||
#include "threadcontroller.h"
|
||||
#include "convert.h"
|
||||
|
||||
#include <ttmath/ttmathobjects.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <cstdlib>
|
||||
#include <windows.h>
|
||||
#include <ctime>
|
||||
|
||||
|
||||
/*!
|
||||
some messages
|
||||
*/
|
||||
#define WM_INIT_TAB_VARIABLES WM_APP
|
||||
#define WM_INIT_TAB_FUNCTIONS WM_APP+1
|
||||
#define WM_INIT_TAB_PRECISION WM_APP+2
|
||||
#define WM_INIT_TAB_DISPLAY WM_APP+3
|
||||
#define WM_SET_LAST_ERROR WM_APP+4
|
||||
#define WM_INIT_TAB_CONVERT WM_APP+5
|
||||
#define WM_UPDATE_EXISTS WM_APP+6
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -124,19 +110,6 @@ public:
|
|||
int GetYSize();
|
||||
|
||||
|
||||
/*!
|
||||
position of the left top corner of the pad window and its size
|
||||
*/
|
||||
void SetPadXPos(int x);
|
||||
void SetPadYPos(int y);
|
||||
int GetPadXPos();
|
||||
int GetPadYPos();
|
||||
void SetPadXSize(int x);
|
||||
void SetPadYSize(int y);
|
||||
int GetPadXSize();
|
||||
int GetPadYSize();
|
||||
|
||||
|
||||
/*!
|
||||
size of the main window when 'normal view' is selected
|
||||
*/
|
||||
|
@ -172,12 +145,6 @@ public:
|
|||
bool GetMaximized();
|
||||
|
||||
|
||||
/*!
|
||||
maximizing of the pad window
|
||||
*/
|
||||
void SetPadMaximized(bool max);
|
||||
bool GetPadMaximized();
|
||||
|
||||
/*!
|
||||
the main window is always on top or not
|
||||
*/
|
||||
|
@ -231,12 +198,6 @@ public:
|
|||
HWND GetMainWindow();
|
||||
|
||||
|
||||
void SetPadWindow(HWND h);
|
||||
HWND GetPadWindow();
|
||||
|
||||
void SetPadEdit(HWND h);
|
||||
HWND GetPadEdit();
|
||||
|
||||
/*!
|
||||
handles to the dialogs which are placed on the tab control
|
||||
*/
|
||||
|
@ -300,7 +261,6 @@ public:
|
|||
Languages * GetLanguages();
|
||||
Convert * GetConvert();
|
||||
char * GetBuffer();
|
||||
char * GetBufferTemp(); // this buffer can be used for temporary tasks
|
||||
unsigned int GetBufferSize();
|
||||
|
||||
|
||||
|
@ -334,28 +294,9 @@ public:
|
|||
will be in a special directory for a particular user, for example:
|
||||
"C:\Documents and Settings\user\applitacion data"
|
||||
*/
|
||||
void SetNameOfFiles();
|
||||
void SetNameOfConfigurationFile();
|
||||
|
||||
|
||||
/*!
|
||||
it is used when 'createconfig' parameter has been passed to the ttcalc program
|
||||
*/
|
||||
void SetConfigName();
|
||||
|
||||
|
||||
/*!
|
||||
returning the name of the help file
|
||||
SetNameOfFiles() should be used first
|
||||
*/
|
||||
const std::string & GetHelpFile();
|
||||
|
||||
|
||||
/*!
|
||||
returning true if such a dir exists
|
||||
if not the method is trying to create it and returns true if it is created
|
||||
*/
|
||||
bool CreateDirIfNotExists(const std::string & app_dir);
|
||||
|
||||
/*!
|
||||
reading and writing to a file
|
||||
|
||||
|
@ -372,6 +313,14 @@ public:
|
|||
*/
|
||||
int GetBadLine();
|
||||
|
||||
/*!
|
||||
setting and returning the decimal point used during printig values
|
||||
0 - '.'
|
||||
1 - ','
|
||||
*/
|
||||
void SetDecimalPoint(int decimal);
|
||||
int GetDecimalPoint();
|
||||
|
||||
|
||||
/*!
|
||||
setting and returning the state of removing trailing zeroes
|
||||
|
@ -390,112 +339,6 @@ public:
|
|||
void SetDegRadGrad(int angle);
|
||||
int GetDegRadGrad();
|
||||
|
||||
|
||||
/*!
|
||||
is the pad window is visible then the method hides it (and vice versa)
|
||||
*/
|
||||
void ShowPad(bool show);
|
||||
|
||||
|
||||
/*!
|
||||
returning true if the pad window is visible
|
||||
*/
|
||||
bool IsPadVisible();
|
||||
|
||||
|
||||
/*!
|
||||
setting/getting the group character
|
||||
0 - none
|
||||
1 - space
|
||||
2 - '`'
|
||||
3 - '\''
|
||||
4 - '.'
|
||||
5 - ','
|
||||
*/
|
||||
void SetGrouping(int g);
|
||||
int GetGrouping();
|
||||
|
||||
|
||||
/*!
|
||||
setting/getting how many digits should be groupped
|
||||
digits can be from 1 to 9
|
||||
*/
|
||||
void SetGroupingDigits(int digits);
|
||||
int GetGroupingDigits();
|
||||
|
||||
|
||||
/*!
|
||||
returning the grouping character
|
||||
*/
|
||||
char GetGroupingChar();
|
||||
|
||||
|
||||
/*!
|
||||
setting/getting the input decimal point
|
||||
0 - dot or comma, 1 - dot, 2 - comma
|
||||
*/
|
||||
void SetInputDecimalPoint(int p);
|
||||
int GetInputDecimalPoint();
|
||||
|
||||
|
||||
/*!
|
||||
returning the input decimal point characters
|
||||
*/
|
||||
void GetInputDecimalPointChar(char * comma1, char * comma2);
|
||||
|
||||
/*!
|
||||
setting and returning the decimal point used during printig values
|
||||
0 - '.'
|
||||
1 - ','
|
||||
*/
|
||||
void SetDecimalPoint(int decimal);
|
||||
int GetDecimalPoint();
|
||||
|
||||
|
||||
/*!
|
||||
returning the decimal point char (used during printig values)
|
||||
*/
|
||||
char GetDecimalPointChar();
|
||||
|
||||
|
||||
/*!
|
||||
setting/getting the separator of function arguments
|
||||
0 - semicolon, 1 - semicolon or dot, 2 - semicolon or comma
|
||||
*/
|
||||
void SetParamSep(int s);
|
||||
int GetParamSep();
|
||||
|
||||
|
||||
/*!
|
||||
returning the character of param separator
|
||||
either a semicolon, dot or comma
|
||||
*/
|
||||
char GetParamSepChar();
|
||||
|
||||
|
||||
/*!
|
||||
setting/getting the test which is made when the program starts
|
||||
(testing for an update)
|
||||
*/
|
||||
void SetCheckUpdateStartup(bool s);
|
||||
bool GetCheckUpdateStartup();
|
||||
|
||||
|
||||
/*!
|
||||
true if there is an update available
|
||||
(used only with the dynamic menu)
|
||||
*/
|
||||
void SetUpdateExists(bool e);
|
||||
bool GetUpdateExists();
|
||||
|
||||
|
||||
/*!
|
||||
setting/getting the time of the last update
|
||||
*/
|
||||
void SetLastUpdate(time_t t);
|
||||
time_t GetLastUpdate();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
bool IsWhiteCharacter(int c);
|
||||
|
@ -503,11 +346,8 @@ private:
|
|||
bool IsDecDigit(int c);
|
||||
bool SplitFunction(const std::string & input, const char * * name, int * param);
|
||||
void CheckCoordinates();
|
||||
void CheckPadCoordinates();
|
||||
void AddVariablesFunctions(IniParser::Section & temp_variables, IniParser::Section & temp_functions, bool if_not_exist);
|
||||
void ReadGlobalSection(std::string * ini_value);
|
||||
int Int(const std::string & text);
|
||||
bool IsGlobalSectionSet(std::string * ini_value, size_t len);
|
||||
|
||||
|
||||
ttmath::Objects variables;
|
||||
ttmath::Objects functions;
|
||||
|
@ -520,12 +360,9 @@ private:
|
|||
|
||||
unsigned int buffer_size;
|
||||
char * buffer;
|
||||
char * buffer_temp;
|
||||
|
||||
HINSTANCE hInstance;
|
||||
HWND main_window;
|
||||
HWND pad_window;
|
||||
HWND pad_edit; // edit control on the pad window
|
||||
HWND tab_window[6];
|
||||
|
||||
int precision;
|
||||
|
@ -534,7 +371,6 @@ private:
|
|||
View view;
|
||||
|
||||
std::string configuration_file;
|
||||
std::string help_file;
|
||||
|
||||
int y_size_normal;
|
||||
int y_size_compact;
|
||||
|
@ -545,12 +381,6 @@ private:
|
|||
int x_size;
|
||||
int y_size;
|
||||
|
||||
int pad_x_pos;
|
||||
int pad_y_pos;
|
||||
int pad_x_size;
|
||||
int pad_y_size;
|
||||
bool pad_maximized;
|
||||
|
||||
int base_input;
|
||||
int base_output;
|
||||
|
||||
|
@ -561,17 +391,9 @@ private:
|
|||
int display_rounding;
|
||||
bool remove_zeroes;
|
||||
int angle_deg_rad_grad;
|
||||
int grouping; // 0 - none, 1 - space, 2 - '`', 3 - '\'', 4 - '.', 5 - ','
|
||||
int grouping_digits; // from 1 to 9
|
||||
int input_decimal_point; // 0 - dot or comma, 1 - dot, 2 - comma
|
||||
int param_sep; // parameters separator: 0 - semicolon, 1 - dot, 2 - comma
|
||||
|
||||
int bad_line;
|
||||
bool show_pad;
|
||||
|
||||
bool check_update_startup;
|
||||
bool update_exists;
|
||||
time_t last_update;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
|
112
src/resource.h
112
src/resource.h
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -50,7 +50,6 @@
|
|||
|
||||
#define IDD_MAIN_DIALOG 101
|
||||
#define IDD_ABOUT_DIALOG 200
|
||||
#define IDD_UPDATE_DIALOG 210
|
||||
#define IDD_DIALOG_ADD_VARIABLE 102
|
||||
#define IDD_DIALOG_ADD_FUNCTION 103
|
||||
|
||||
|
@ -62,7 +61,6 @@
|
|||
#define IDD_DIALOG_CONVERT 115
|
||||
|
||||
#define IDR_MENU 200
|
||||
#define IDR_MENU2 201
|
||||
#define IDC_TAB 1010
|
||||
#define IDI_ICON2 104
|
||||
#define IDI_ICON1 105
|
||||
|
@ -84,6 +82,7 @@
|
|||
#define IDC_BUTTON_SGN 1075
|
||||
#define IDC_BUTTON_MOD 1076
|
||||
|
||||
|
||||
// values from IDC_BUTTON_PRESS_0 to IDC_BUTTON_PRESS_9 should be with the step equal one
|
||||
#define IDC_BUTTON_PRESS_0 1100
|
||||
#define IDC_BUTTON_PRESS_1 1101
|
||||
|
@ -117,19 +116,6 @@
|
|||
#define IDC_BUTTON_INT 1129
|
||||
#define IDC_BUTTON_ROUND 1130
|
||||
#define IDC_BUTTON_EXP 1131
|
||||
#define IDC_BUTTON_SQRT 1400
|
||||
#define IDC_BUTTON_BRACKETS_ALL 1401
|
||||
#define IDC_BUTTON_1DIV_BRACKETS_ALL 1402
|
||||
#define IDC_BUTTON_SEMICOLON 1403
|
||||
#define IDC_BUTTON_PERCENTAGE 1404
|
||||
#define IDC_BUTTON_FLOOR 1405
|
||||
#define IDC_BUTTON_CEIL 1406
|
||||
#define IDC_BUTTON_MIN 1407
|
||||
#define IDC_BUTTON_MAX 1408
|
||||
#define IDC_BUTTON_AVG 1409
|
||||
#define IDC_BUTTON_SUM 1410
|
||||
#define IDC_BUTTON_ROOT 1411
|
||||
#define IDC_BUTTON_GAMMA 1412
|
||||
|
||||
|
||||
// variables tab
|
||||
|
@ -168,27 +154,21 @@
|
|||
// display tab
|
||||
#define IDC_COMBO_DISPLAY_INPUT 1156
|
||||
#define IDC_COMBO_DISPLAY_OUTPUT 1157
|
||||
#define IDC_COMBO_DISPLAY_ROUNDING 1158
|
||||
#define IDC_RADIO_DISPLAY_ALWAYS_SCIENTIFIC 1159
|
||||
#define IDC_RADIO_DISPLAY_NOT_ALWAYS_SCIENTIFIC 1160
|
||||
#define IDC_LABEL_DISPLAY_INPUT 1161
|
||||
#define IDC_LABEL_DISPLAY_OUTPUT 1162
|
||||
#define IDC_LABEL_DISPLAY_ROUNDING 1163
|
||||
#define IDC_UPDOWN_DISPLAY_WHEN_SCIENTIFIC 1164
|
||||
#define IDC_EDIT_DISPLAY_WHEN_SCIENTIFIC 1165
|
||||
#define IDC_LABEL_DISPLAY_SCIENTIFIC 1166
|
||||
#define IDC_LABEL_OUTPUT_DECIMAL_POINT 1167
|
||||
#define IDC_COMBO_OUTPUT_DECIMAL_POINT 1168
|
||||
#define IDC_CHECK_REMOVE_ZEROES 1169
|
||||
#define IDC_LABEL_DISPLAY_DEG_RAD_GRAD 1170
|
||||
#define IDC_COMBO_DEG_RAD_GRAD 1171
|
||||
#define IDC_COMBO_DISPLAY_GROUPING 1172
|
||||
#define IDC_COMBO_DISPLAY_GROUPING_DIGITS 1173
|
||||
#define IDC_LABEL_DISPLAY_GROUPING 1174
|
||||
#define IDC_COMBO_INPUT_DECIMAL_POINT 1175
|
||||
#define IDC_LABEL_INPUT_DECIMAL_POINT 1176
|
||||
#define IDC_LABEL_PARAM_SEPARATE 1177
|
||||
#define IDC_COMBO_PARAM_SEPARATE 1178
|
||||
#define IDC_COMBO_DISPLAY_ROUNDING 1159
|
||||
#define IDC_RADIO_DISPLAY_ALWAYS_SCIENTIFIC 1160
|
||||
#define IDC_RADIO_DISPLAY_NOT_ALWAYS_SCIENTIFIC 1161
|
||||
#define IDC_LABEL_DISPLAY_INPUT 1162
|
||||
#define IDC_LABEL_DISPLAY_OUTPUT 1163
|
||||
#define IDC_LABEL_DISPLAY_ROUNDING 1164
|
||||
#define IDC_UPDOWN_DISPLAY_WHEN_SCIENTIFIC 1165
|
||||
#define IDC_EDIT_DISPLAY_WHEN_SCIENTIFIC 1166
|
||||
#define IDC_LABEL_GROUP_SCIENTIFIC 1168
|
||||
#define IDC_LABEL_DECIMAL_POINT 1169
|
||||
#define IDC_COMBO_DECIMAL_POINT 1170
|
||||
#define IDC_CHECK_REMOVE_ZEROES 1171
|
||||
#define IDC_LABEL_DISPLAY_DEG_RAD_GRAD 1172
|
||||
#define IDC_COMBO_DEG_RAD_GRAD 1173
|
||||
|
||||
|
||||
// convert tab
|
||||
#define IDC_LIST_UNIT_TYPE 1200
|
||||
|
@ -207,15 +187,11 @@
|
|||
#define IDM_VIEW_INDEX 0
|
||||
#define IDM_EDIT_INDEX 1
|
||||
#define IDM_HELP_INDEX 2
|
||||
#define IDM_UPDATE_AVAILABLE_INDEX 3
|
||||
|
||||
#define IDM_LANGUAGE_INDEX 8
|
||||
|
||||
#define IDM_LANGUAGE_INDEX 6
|
||||
#define IDM_NEW_WINDOW 40001
|
||||
#define IDM_NORMAL_VIEW 40002
|
||||
#define IDM_COMPACT_VIEW 40003
|
||||
#define IDM_PAD 40004
|
||||
#define IDM_ALWAYS_ON_TOP 40005
|
||||
#define IDM_ALWAYS_ON_TOP 40004
|
||||
#define IDM_LANGUAGE_ENGLISH 40010
|
||||
#define IDM_LANGUAGE_POLISH 40011
|
||||
#define IDM_LANGUAGE_SPANISH 40012
|
||||
|
@ -223,54 +199,16 @@
|
|||
#define IDM_LANGUAGE_CHINESE 40014
|
||||
#define IDM_LANGUAGE_RUSSIAN 40015
|
||||
#define IDM_LANGUAGE_SWEDISH 40016
|
||||
#define IDM_LANGUAGE_ITALIAN 40017
|
||||
#define IDM_LANGUAGE_GERMAN 40018
|
||||
#define IDM_CLOSE_PROGRAM 40020
|
||||
|
||||
#define IDM_EDIT_UNDO 40030
|
||||
#define IDM_EDIT_CUT 40031
|
||||
#define IDM_EDIT_COPY 40032
|
||||
#define IDM_EDIT_PASTE 40033
|
||||
#define IDM_EDIT_DEL 40034
|
||||
#define IDM_EDIT_COPY_RESULT 40035
|
||||
#define IDM_EDIT_COPY_BOTH 40036
|
||||
#define IDM_EDIT_PASTE_FORMULA 40037
|
||||
#define IDM_EDIT_SELECT_ALL 40038
|
||||
#define IDM_EDIT_BRACKET 40039
|
||||
#define IDM_EDIT_SWAP 40040
|
||||
|
||||
#define IDM_HELP_HELP 40050
|
||||
#define IDM_HELP_PROJECT_PAGE 40051
|
||||
#define IDM_HELP_CHECK_UPDATE 40052
|
||||
#define IDM_HELP_ABOUT 40053
|
||||
|
||||
#define IDM_UPDATE_AVAILABLE 40060
|
||||
|
||||
// pad menu
|
||||
#define MENUPAD_FILE_INDEX 0
|
||||
#define MENUPAD_EDIT_INDEX 1
|
||||
#define MENUPAD_FILE_NEW 40500
|
||||
#define MENUPAD_FILE_OPEN 40501
|
||||
#define MENUPAD_FILE_SAVE 40502
|
||||
#define MENUPAD_FILE_CLOSE 40503
|
||||
#define MENUPAD_EDIT_UNDO 40510
|
||||
#define MENUPAD_EDIT_CUT 40511
|
||||
#define MENUPAD_EDIT_COPY 40512
|
||||
#define MENUPAD_EDIT_PASTE 40513
|
||||
#define MENUPAD_EDIT_DEL 40514
|
||||
#define MENUPAD_EDIT_SELECTALL 40515
|
||||
|
||||
#define IDM_EDIT_PASTE 40031
|
||||
#define IDM_EDIT_COPY_RESULT 40032
|
||||
#define IDM_HELP_HELP 40040
|
||||
#define IDM_HELP_PROJECT_PAGE 40041
|
||||
#define IDM_HELP_ABOUT 40049
|
||||
|
||||
// about dialog
|
||||
#define IDC_ABOUT_TEXT 1200
|
||||
#define IDB_BITMAP_ABOUT 1201
|
||||
|
||||
// update dialog
|
||||
#define IDC_UPDATE_INFO1 1300
|
||||
#define IDC_UPDATE_INFO2 1301
|
||||
#define IDC_PROGRESS 1302
|
||||
#define IDC_BUTTON_NEXT 1303
|
||||
#define IDC_BUTTON_CANCEL 1304
|
||||
#define IDC_CHECK_UPDATE_STURTUP 1305
|
||||
|
||||
#endif
|
||||
|
|
400
src/resource.rc
400
src/resource.rc
|
@ -1,310 +1,229 @@
|
|||
//#define APSTUDIO_READONLY_SYMBOLS
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
//#include "afxres.h"
|
||||
//#undef APSTUDIO_READONLY_SYMBOLS
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
#include "windows.h"
|
||||
#include "resource.h"
|
||||
|
||||
LANGUAGE LANG_POLISH, 1
|
||||
IDI_ICON2 ICON "..\\res\\icon02.ico"
|
||||
104 ICON "..\\res\\icon02.ico"
|
||||
|
||||
LANGUAGE LANG_POLISH, 2
|
||||
IDI_ICON1 ICON "..\\res\\icon01.ico"
|
||||
105 ICON "..\\res\\icon01.ico"
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
LANGUAGE LANG_NEUTRAL, 0
|
||||
200 MENU
|
||||
FIXED IMPURE LOADONCALL DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "View"
|
||||
POPUP "&View"
|
||||
BEGIN
|
||||
MENUITEM "New window", IDM_NEW_WINDOW
|
||||
MENUITEM "&New window", 40001
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Normal", IDM_NORMAL_VIEW
|
||||
MENUITEM "Compact", IDM_COMPACT_VIEW
|
||||
MENUITEM "No&rmal", 40002
|
||||
MENUITEM "&Compact", 40003
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Pad", IDM_PAD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Always on top", IDM_ALWAYS_ON_TOP
|
||||
POPUP "Language"
|
||||
MENUITEM "&Always on top", 40004
|
||||
POPUP "&Language"
|
||||
BEGIN
|
||||
MENUITEM "English", IDM_LANGUAGE_ENGLISH
|
||||
MENUITEM "Polish", IDM_LANGUAGE_POLISH
|
||||
MENUITEM "Spanish", IDM_LANGUAGE_SPANISH
|
||||
MENUITEM "Danish", IDM_LANGUAGE_DANISH
|
||||
MENUITEM "Chinese", IDM_LANGUAGE_CHINESE
|
||||
MENUITEM "Russian", IDM_LANGUAGE_RUSSIAN
|
||||
MENUITEM "Swedish", IDM_LANGUAGE_SWEDISH
|
||||
MENUITEM "Italian", IDM_LANGUAGE_ITALIAN
|
||||
MENUITEM "German", IDM_LANGUAGE_GERMAN
|
||||
MENUITEM "&English", 40010
|
||||
MENUITEM "&Polish", 40011
|
||||
MENUITEM "&Spanish", 40012
|
||||
MENUITEM "&Danish", 40013
|
||||
MENUITEM "&Chinese", 40014
|
||||
MENUITEM "&Russian", 40015
|
||||
MENUITEM "&Swedish", 40016
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Close", IDM_CLOSE_PROGRAM
|
||||
MENUITEM "&Close", 40020
|
||||
END
|
||||
POPUP "Edit"
|
||||
POPUP "&Edit"
|
||||
BEGIN
|
||||
MENUITEM "Undo", IDM_EDIT_UNDO
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Cut", IDM_EDIT_CUT
|
||||
MENUITEM "Copy", IDM_EDIT_COPY
|
||||
MENUITEM "Paste", IDM_EDIT_PASTE
|
||||
MENUITEM "Delete", IDM_EDIT_DEL
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Copy result", IDM_EDIT_COPY_RESULT
|
||||
MENUITEM "Copy both", IDM_EDIT_COPY_BOTH
|
||||
MENUITEM "Paste formula", IDM_EDIT_PASTE_FORMULA
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Select all", IDM_EDIT_SELECT_ALL
|
||||
MENUITEM "Bracket", IDM_EDIT_BRACKET
|
||||
MENUITEM "Swap", IDM_EDIT_SWAP
|
||||
MENUITEM "&Undo", 40030
|
||||
MENUITEM "&Paste", 40031
|
||||
MENUITEM "&Copy the result", 40032
|
||||
END
|
||||
POPUP "Help"
|
||||
POPUP "&Help"
|
||||
BEGIN
|
||||
MENUITEM "Help", IDM_HELP_HELP
|
||||
MENUITEM "Project page", IDM_HELP_PROJECT_PAGE
|
||||
MENUITEM "Check update...", IDM_HELP_CHECK_UPDATE
|
||||
MENUITEM "&Help", 40040
|
||||
MENUITEM "&Project page", 40041
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "About", IDM_HELP_ABOUT
|
||||
MENUITEM "&About", 40049
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
IDR_MENU2 MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "File"
|
||||
BEGIN
|
||||
// MENUITEM "New", MENUPAD_FILE_NEW
|
||||
// temporarily this option is not available
|
||||
MENUITEM "Open...", MENUPAD_FILE_OPEN
|
||||
MENUITEM "Save as...", MENUPAD_FILE_SAVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Close", MENUPAD_FILE_CLOSE
|
||||
END
|
||||
POPUP "Edit"
|
||||
BEGIN
|
||||
MENUITEM "Undo \tCtrl+Z", MENUPAD_EDIT_UNDO
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Cut \tCtrl+X", MENUPAD_EDIT_CUT
|
||||
MENUITEM "Copy \tCtrl+C", MENUPAD_EDIT_COPY
|
||||
MENUITEM "Paste \tCtrl+V", MENUPAD_EDIT_PASTE
|
||||
MENUITEM "Delete \tDel", MENUPAD_EDIT_DEL
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Select all \tCtrl+A", MENUPAD_EDIT_SELECTALL
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
IDD_MAIN_DIALOG DIALOGEX 0, 0, 295, 189
|
||||
STYLE DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION |
|
||||
WS_SYSMENU | WS_THICKFRAME
|
||||
CAPTION "TTCalc"
|
||||
101 DIALOG 0, 0, 265, 150
|
||||
STYLE DS_SETFONT |DS_CENTER |WS_POPUP |WS_SYSMENU |WS_THICKFRAME |WS_MAXIMIZEBOX |WS_MINIMIZEBOX |WS_CAPTION
|
||||
MENU 200
|
||||
#ifndef TTCALC_PORTABLE
|
||||
CAPTION "TTCalc"
|
||||
#else
|
||||
CAPTION "TTCalc portable"
|
||||
#endif
|
||||
FONT 8, "Ms Shell Dlg"
|
||||
BEGIN
|
||||
EDITTEXT IDC_INPUT_EDIT,0,6,260,14,ES_AUTOHSCROLL
|
||||
EDITTEXT IDC_OUTPUT_EDIT,0,21,260,14,ES_AUTOHSCROLL | ES_READONLY
|
||||
CONTROL "",IDC_TAB,"SysTabControl32",WS_GROUP | WS_TABSTOP,0,39,
|
||||
292,123,WS_EX_CONTROLPARENT
|
||||
CONTROL "",1000,"EDIT",ES_AUTOHSCROLL |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,0,6,260,14
|
||||
CONTROL "",1001,"EDIT",ES_READONLY |ES_AUTOHSCROLL |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,0,21,260,14
|
||||
CONTROL "",1010,"SysTabControl32",WS_CHILD |WS_TABSTOP |WS_GROUP| WS_VISIBLE ,0,39,261,106, WS_EX_CONTROLPARENT
|
||||
END
|
||||
|
||||
|
||||
IDD_DIALOG_ADD_VARIABLE DIALOG DISCARDABLE 0, 0, 358, 61
|
||||
102 DIALOG DISCARDABLE 0, 0, 358, 61
|
||||
STYLE DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE |
|
||||
WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Add a new variable"
|
||||
FONT 8, "Ms Shell Dlg"
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Ok",IDOK,291,10,50,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "Cancel",IDCANCEL,291,28,50,14,BS_CENTER | BS_VCENTER
|
||||
EDITTEXT IDC_EDIT_VARIABLE_NAME,47,10,67,14,ES_AUTOHSCROLL
|
||||
EDITTEXT IDC_EDIT_VARIABLE_VALUE,47,28,226,14,ES_AUTOHSCROLL
|
||||
LTEXT "name:",IDC_STATIC_VARIABLE_NAME,7,12,38,8
|
||||
LTEXT "value:",IDC_STATIC_VARIABLE_VALUE,7,30,38,8
|
||||
DEFPUSHBUTTON "Ok",1,291,10,50,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "Cancel",2,291,28,50,14,BS_CENTER | BS_VCENTER
|
||||
EDITTEXT 1134,47,10,67,14,ES_AUTOHSCROLL
|
||||
EDITTEXT 1135,47,28,226,14,ES_AUTOHSCROLL
|
||||
LTEXT "name:",1136,7,12,38,8
|
||||
LTEXT "value:",1137,7,30,38,8
|
||||
END
|
||||
|
||||
IDD_DIALOG_ADD_FUNCTION DIALOG DISCARDABLE 0, 0, 370, 74
|
||||
103 DIALOG DISCARDABLE 0, 0, 370, 74
|
||||
STYLE DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE |
|
||||
WS_CAPTION | WS_SYSMENU
|
||||
FONT 8, "Ms Shell Dlg"
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Ok",IDOK,304,10,50,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "Cancel",IDCANCEL,304,27,50,14,BS_CENTER | BS_VCENTER
|
||||
EDITTEXT IDC_EDIT_FUNCTION_NAME,55,10,67,14,ES_AUTOHSCROLL
|
||||
COMBOBOX IDC_COMBO_FUNCTION_PARAM,55,29,67,130,CBS_DROPDOWNLIST | WS_TABSTOP
|
||||
EDITTEXT IDC_EDIT_FUNCTION_VALUE,55,47,299,14,ES_AUTOHSCROLL
|
||||
LTEXT "name:",IDC_STATIC_FUNCTION_NAME,7,12,46,8
|
||||
LTEXT "value:",IDC_STATIC_FUNCTION_VALUE,7,49,46,8
|
||||
LTEXT "param:",IDC_STATIC_FUNCTION_PARAM,7,30,46,8
|
||||
DEFPUSHBUTTON "Ok",1,304,10,50,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "Cancel",2,304,27,50,14,BS_CENTER | BS_VCENTER
|
||||
EDITTEXT 1144,55,10,67,14,ES_AUTOHSCROLL
|
||||
COMBOBOX 1146,55,29,67,130,CBS_DROPDOWNLIST | WS_TABSTOP
|
||||
EDITTEXT 1145,55,47,299,14,ES_AUTOHSCROLL
|
||||
LTEXT "name:",1147,7,12,46,8
|
||||
LTEXT "value:",1149,7,49,46,8
|
||||
LTEXT "param:",1148,7,30,46,8
|
||||
END
|
||||
|
||||
|
||||
IDD_DIALOG_STANDARD DIALOG DISCARDABLE 0, 0, 288, 107
|
||||
STYLE DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_GROUP | WS_TABSTOP
|
||||
110 DIALOGEX 0, 0, 287, 90
|
||||
STYLE DS_3DLOOK | DS_FIXEDSYS |DS_SETFONT | WS_CHILD| WS_TABSTOP |WS_GROUP
|
||||
FONT 8, "Ms Shell Dlg"
|
||||
BEGIN
|
||||
PUSHBUTTON "Clear",IDC_BUTTON_CLEAR,4,3,55,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "(",IDC_BUTTON_FIRST_BRACKET,62,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON ")",IDC_BUTTON_LAST_BRACKET,91,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "(...)",IDC_BUTTON_BRACKETS_ALL,4,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON ";",IDC_BUTTON_SEMICOLON,33,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "%",IDC_BUTTON_PERCENTAGE,62,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "^",IDC_BUTTON_POWER,91,20,26,14,BS_CENTER | BS_BOTTOM
|
||||
PUSHBUTTON "7",IDC_BUTTON_PRESS_7,4,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "8",IDC_BUTTON_PRESS_8,33,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "9",IDC_BUTTON_PRESS_9,62,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "/",IDC_BUTTON_DIV,91,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "4",IDC_BUTTON_PRESS_4,4,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "5",IDC_BUTTON_PRESS_5,33,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "6",IDC_BUTTON_PRESS_6,62,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "*",IDC_BUTTON_MUL,91,54,26,14,BS_CENTER | BS_BOTTOM
|
||||
PUSHBUTTON "1",IDC_BUTTON_PRESS_1,4,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "2",IDC_BUTTON_PRESS_2,33,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "3",IDC_BUTTON_PRESS_3,62,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "-",IDC_BUTTON_SUB,91,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "0",IDC_BUTTON_PRESS_0,4,88,55,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON ",",IDC_BUTTON_COMMA,62,88,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "+",IDC_BUTTON_ADD,91,88,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "sin",IDC_BUTTON_SIN,131,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "asin",IDC_BUTTON_ASIN,160,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "ln",IDC_BUTTON_LN,189,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "cos",IDC_BUTTON_COS,131,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "acos",IDC_BUTTON_ACOS,160,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "log",IDC_BUTTON_LOG,189,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "tan",IDC_BUTTON_TAN,131,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "atan",IDC_BUTTON_ATAN,160,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "exp",IDC_BUTTON_EXP,189,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "cot",IDC_BUTTON_COT,131,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "acot",IDC_BUTTON_ACOT,160,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "abs",IDC_BUTTON_ABS,189,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "int",IDC_BUTTON_INT,131,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "round",IDC_BUTTON_ROUND,160,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "mod",IDC_BUTTON_MOD,189,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "floor",IDC_BUTTON_FLOOR,131,88,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "ceil",IDC_BUTTON_CEIL,160,88,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "sgn",IDC_BUTTON_SGN,189,88,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "min",IDC_BUTTON_MIN,229,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "max",IDC_BUTTON_MAX,258,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "avg",IDC_BUTTON_AVG,229,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "sum",IDC_BUTTON_SUM,258,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "sqrt",IDC_BUTTON_SQRT,229,37,26,14, BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "root",IDC_BUTTON_ROOT,258,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "!",IDC_BUTTON_FACTORIAL,229,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "gamma",IDC_BUTTON_GAMMA,258,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "e",IDC_BUTTON_E,229,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "pi",IDC_BUTTON_PI,258,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "1/(...)",IDC_BUTTON_1DIV_BRACKETS_ALL,229,88,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "err",IDC_BUTTON_ERROR,258,88,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "Clear",1110,3,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "(",1111,33,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON ")",1112,62,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "^",1128,91,3,26,14,BS_CENTER | BS_BOTTOM
|
||||
PUSHBUTTON "7",1107,3,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "8",1108,33,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "9",1109,62,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "/",1113,91,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "4",1104,3,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "5",1105,33,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "6",1106,62,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "*",1114,91,37,26,14,BS_CENTER | BS_BOTTOM
|
||||
PUSHBUTTON "1",1101,3,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "2",1102,33,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "3",1103,62,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "-",1115,91,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "0",1100,3,71,56,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON ",",1117,62,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "+",1116,91,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "sin",1120,131,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "asin",1071,160,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "ln",1124,189,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "cos",1121,131,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "acos",1072,160,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "log",1125,189,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "tan",1122,131,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "atan",1073,160,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "exp",1131,189,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "cot",1123,131,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "acot",1074,160,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "abs",1126,189,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "int",1129,131,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "round",1130,160,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "!",1127,189,71,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "sgn",1075,229,3,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "mod",1076,229,20,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "e",1118,229,37,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "pi",1119,229,54,26,14,BS_CENTER | BS_VCENTER
|
||||
PUSHBUTTON "err",1070,229,71,26,14,BS_CENTER | BS_VCENTER
|
||||
END
|
||||
|
||||
|
||||
IDD_DIALOG_VARIABLES DIALOG 0, 0, 288, 107
|
||||
111 DIALOG 0, 0, 287, 90
|
||||
STYLE DS_3DLOOK |DS_FIXEDSYS |DS_SETFONT |WS_CHILD | WS_TABSTOP |WS_GROUP
|
||||
CAPTION "tab2"
|
||||
FONT 8, "Ms Shell Dlg"
|
||||
BEGIN
|
||||
CONTROL "Add",IDC_BUTTON_ADD_VARIABLE,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,3,50,14
|
||||
CONTROL "Edit",IDC_BUTTON_EDIT_VARIABLE,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,21,50,14
|
||||
CONTROL "Delete",IDC_BUTTON_DELETE_VARIABLE,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,39,50,14
|
||||
CONTROL "",IDC_VARIABLES_LIST,"SysListView32",LVS_REPORT |LVS_SHOWSELALWAYS |LVS_SORTASCENDING |LVS_ALIGNLEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,57,3,223,85
|
||||
CONTROL "Add",1133,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,3,50,14
|
||||
CONTROL "Edit",1138,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,21,50,14
|
||||
CONTROL "Delete",1139,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,39,50,14
|
||||
CONTROL "",1132,"SysListView32",LVS_REPORT |LVS_SHOWSELALWAYS |LVS_SORTASCENDING |LVS_ALIGNLEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,57,3,223,85
|
||||
END
|
||||
|
||||
IDD_DIALOG_FUNCTIONS DIALOG 0, 0, 288, 107
|
||||
112 DIALOG 0, 0, 287, 90
|
||||
STYLE DS_3DLOOK |DS_FIXEDSYS |DS_SETFONT |WS_CHILD | WS_TABSTOP |WS_GROUP
|
||||
CAPTION "tab3"
|
||||
FONT 8, "Ms Shell Dlg"
|
||||
BEGIN
|
||||
CONTROL "Add",IDC_BUTTON_ADD_FUNCTION,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,3,50,14
|
||||
CONTROL "Edit",IDC_BUTTON_EDIT_FUNCTION,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,21,50,14
|
||||
CONTROL "Delete",IDC_BUTTON_DELETE_FUNCTION,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,39,50,14
|
||||
CONTROL "",IDC_FUNCTIONS_LIST,"SysListView32",LVS_REPORT |LVS_SHOWSELALWAYS |LVS_SORTASCENDING |LVS_ALIGNLEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,57,3,223,85
|
||||
CONTROL "Add",1140,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,3,50,14
|
||||
CONTROL "Edit",1141,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,21,50,14
|
||||
CONTROL "Delete",1142,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,3,39,50,14
|
||||
CONTROL "",1143,"SysListView32",LVS_REPORT |LVS_SHOWSELALWAYS |LVS_SORTASCENDING |LVS_ALIGNLEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,57,3,223,85
|
||||
END
|
||||
|
||||
#ifndef TTCALC_PORTABLE
|
||||
|
||||
IDD_DIALOG_PRECISION DIALOG DISCARDABLE 0, 0, 288, 107
|
||||
STYLE DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_CAPTION | WS_GROUP |
|
||||
WS_TABSTOP
|
||||
113 DIALOG 0, 0, 287, 90
|
||||
STYLE DS_3DLOOK |DS_FIXEDSYS |DS_SETFONT |WS_CHILD | WS_TABSTOP |WS_GROUP
|
||||
CAPTION "tab4"
|
||||
FONT 8, "Ms Shell Dlg"
|
||||
BEGIN
|
||||
CONTROL "precision 1",IDC_RADIO_PRECISION_1,"Button",
|
||||
BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,21,
|
||||
11,256,10
|
||||
CONTROL "precision 2",IDC_RADIO_PRECISION_2,"Button",
|
||||
BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,21,42,256,10
|
||||
CONTROL "precision 3",IDC_RADIO_PRECISION_3,"Button",
|
||||
BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,21,73,256,10
|
||||
LTEXT "info 1",IDC_LABEL_PRECISION_1_INFO,34,24,243,8,NOT
|
||||
WS_GROUP
|
||||
LTEXT "info 2",IDC_LABEL_PRECISION_2_INFO,34,55,243,8,NOT
|
||||
WS_GROUP
|
||||
LTEXT "info 3",IDC_LABEL_PRECISION_3_INFO,34,85,243,8,NOT
|
||||
WS_GROUP
|
||||
CONTROL "precision 1",1150,"BUTTON",BS_AUTORADIOBUTTON |BS_LEFT |WS_CHILD |WS_GROUP|WS_TABSTOP | WS_VISIBLE ,15,4,252,10
|
||||
CONTROL "precision 2",1151,"BUTTON",BS_AUTORADIOBUTTON |BS_LEFT |WS_CHILD |WS_TABSTOP | WS_VISIBLE ,15,33,252,10
|
||||
CONTROL "precision 3",1152,"BUTTON",BS_AUTORADIOBUTTON |BS_LEFT |WS_CHILD |WS_TABSTOP | WS_VISIBLE ,15,62,252,10
|
||||
CONTROL "info 1",1153,"STATIC",SS_LEFT |WS_CHILD |WS_VISIBLE ,28,17,245,8
|
||||
CONTROL "info 2",1154,"STATIC",SS_LEFT |WS_CHILD |WS_VISIBLE ,28,46,245,8
|
||||
CONTROL "info 3",1155,"STATIC",SS_LEFT |WS_CHILD |WS_VISIBLE ,28,74,245,8
|
||||
END
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
IDD_DIALOG_DISPLAY DIALOG DISCARDABLE 0, 0, 288, 107
|
||||
114 DIALOG DISCARDABLE 0, 0, 255, 90
|
||||
STYLE DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_CAPTION | WS_GROUP |
|
||||
WS_TABSTOP
|
||||
CAPTION "tab5"
|
||||
FONT 8, "Ms Shell Dlg"
|
||||
BEGIN
|
||||
CONTROL "Input base",IDC_LABEL_DISPLAY_INPUT,"Static",
|
||||
SS_LEFTNOWORDWRAP | WS_GROUP,8,4,43,8
|
||||
CONTROL "Output base",IDC_LABEL_DISPLAY_OUTPUT,"Static",
|
||||
SS_LEFTNOWORDWRAP | WS_GROUP,8,18,43,8
|
||||
CONTROL "Rounding",IDC_LABEL_DISPLAY_ROUNDING,"Static",
|
||||
SS_LEFTNOWORDWRAP | WS_GROUP,8,32,43,8
|
||||
CONTROL "Grouping",IDC_LABEL_DISPLAY_GROUPING,"Static",SS_LEFTNOWORDWRAP |
|
||||
WS_GROUP,8,46,43,8
|
||||
CONTROL "Input decimal point",IDC_LABEL_INPUT_DECIMAL_POINT,
|
||||
"Static",SS_LEFTNOWORDWRAP | WS_GROUP,143,4,87,8
|
||||
CONTROL "Output decimal point",IDC_LABEL_OUTPUT_DECIMAL_POINT,"Static",
|
||||
SS_LEFTNOWORDWRAP | WS_GROUP,143,18,87,8
|
||||
CONTROL "Parameters separated by",IDC_LABEL_PARAM_SEPARATE,
|
||||
"Static",SS_LEFTNOWORDWRAP | WS_GROUP,143,32,87,8
|
||||
CONTROL "trigonometric functions",IDC_LABEL_DISPLAY_DEG_RAD_GRAD,
|
||||
"Static",SS_LEFTNOWORDWRAP | WS_GROUP,143,46,87,8
|
||||
COMBOBOX IDC_COMBO_DISPLAY_INPUT,61,2,59,200,CBS_DROPDOWNLIST |
|
||||
WS_GROUP | WS_TABSTOP
|
||||
COMBOBOX IDC_COMBO_DISPLAY_OUTPUT,61,16,59,200,CBS_DROPDOWNLIST |
|
||||
COMBOBOX 1156,58,5,58,200,CBS_DROPDOWNLIST | WS_GROUP |
|
||||
WS_TABSTOP
|
||||
COMBOBOX IDC_COMBO_DISPLAY_ROUNDING,61,30,59,200,CBS_DROPDOWNLIST |
|
||||
WS_TABSTOP
|
||||
COMBOBOX IDC_COMBO_DISPLAY_GROUPING,61,44,59,100,CBS_DROPDOWNLIST |
|
||||
WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDC_COMBO_DISPLAY_GROUPING_DIGITS,61,58,59,100,CBS_DROPDOWNLIST |
|
||||
WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDC_COMBO_INPUT_DECIMAL_POINT,234,2,49,56,
|
||||
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDC_COMBO_OUTPUT_DECIMAL_POINT,234,16,49,62,CBS_DROPDOWNLIST |
|
||||
WS_TABSTOP
|
||||
COMBOBOX IDC_COMBO_PARAM_SEPARATE,234,30,49,54,CBS_DROPDOWNLIST |
|
||||
WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDC_COMBO_DEG_RAD_GRAD,234,44,49,53,CBS_DROPDOWNLIST |
|
||||
WS_TABSTOP
|
||||
CONTROL "remove trailing zeroes",IDC_CHECK_REMOVE_ZEROES,"Button",
|
||||
BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_LEFT | WS_TABSTOP,142,
|
||||
60,140,10
|
||||
CONTROL "Always",IDC_RADIO_DISPLAY_ALWAYS_SCIENTIFIC,"Button",
|
||||
BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,14,
|
||||
87,54,10
|
||||
CONTROL "When the exponent is greater than:",
|
||||
IDC_RADIO_DISPLAY_NOT_ALWAYS_SCIENTIFIC,"Button",
|
||||
BS_AUTORADIOBUTTON | BS_LEFT,90,87,151,10
|
||||
EDITTEXT IDC_EDIT_DISPLAY_WHEN_SCIENTIFIC,245,84,29,14,ES_NUMBER |
|
||||
WS_GROUP
|
||||
CONTROL "",IDC_UPDOWN_DISPLAY_WHEN_SCIENTIFIC,"msctls_updown32",
|
||||
UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS,276,84,
|
||||
11,14
|
||||
GROUPBOX "Print scientific value",IDC_LABEL_DISPLAY_SCIENTIFIC,8,76,275,26
|
||||
COMBOBOX 1157,58,19,58,200,CBS_DROPDOWNLIST | WS_TABSTOP
|
||||
CONTROL "Input",1162,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,11,7,
|
||||
43,8
|
||||
CONTROL "Output",1163,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,11,
|
||||
22,43,8
|
||||
COMBOBOX 1159,58,33,58,200,CBS_DROPDOWNLIST | WS_TABSTOP
|
||||
CONTROL "Rounding",1164,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,11,
|
||||
36,43,8
|
||||
COMBOBOX 1173,213,5,38,54,CBS_DROPDOWNLIST | WS_TABSTOP
|
||||
CONTROL "sin/cos asin/acos",1172,"Static",SS_LEFTNOWORDWRAP |
|
||||
WS_GROUP,137,7,73,8
|
||||
COMBOBOX 1170,213,19,38,62,CBS_DROPDOWNLIST | WS_TABSTOP
|
||||
CONTROL "Decimal point",1169,"Static",SS_LEFTNOWORDWRAP |
|
||||
WS_GROUP,137,22,73,8
|
||||
CONTROL "remove trailing zeroes",1171,"Button",BS_AUTOCHECKBOX |
|
||||
BS_LEFTTEXT | BS_LEFT | WS_TABSTOP,136,36,115,10
|
||||
CONTROL "Always",1160,"Button",BS_AUTORADIOBUTTON | BS_LEFT |
|
||||
WS_GROUP | WS_TABSTOP,19,65,54,10
|
||||
CONTROL "When the exponent is greater than:",1161,"Button",
|
||||
BS_AUTORADIOBUTTON | BS_LEFT,77,65,138,10
|
||||
EDITTEXT 1166,217,63,29,14,ES_NUMBER | WS_GROUP
|
||||
CONTROL "",1165,"msctls_updown32",UDS_SETBUDDYINT |
|
||||
UDS_ALIGNRIGHT | UDS_ARROWKEYS,201,73,11,14
|
||||
GROUPBOX "Print scientific value",1168,11,51,240,31
|
||||
END
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef TTCALC_CONVERT
|
||||
|
||||
IDD_DIALOG_CONVERT DIALOG DISCARDABLE 0, 0, 288, 107
|
||||
115 DIALOG DISCARDABLE 0, 0, 260, 90
|
||||
STYLE DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_CAPTION | WS_GROUP |
|
||||
WS_TABSTOP
|
||||
CAPTION "tab6"
|
||||
|
@ -337,46 +256,31 @@ END
|
|||
#endif
|
||||
|
||||
#ifndef TTCALC_PORTABLE
|
||||
IDD_ABOUT_DIALOG DIALOG DISCARDABLE 0, 0, 349, 284
|
||||
200 DIALOG DISCARDABLE 0, 0, 349, 202
|
||||
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION |
|
||||
WS_SYSMENU
|
||||
CAPTION "About"
|
||||
FONT 8, "MS Sans Serif"
|
||||
BEGIN
|
||||
CONTROL 1201,0,"Static",SS_BITMAP | SS_REALSIZEIMAGE,3,3,115,277
|
||||
EDITTEXT IDC_ABOUT_TEXT,128,11,215,243,ES_MULTILINE | ES_READONLY |
|
||||
NOT WS_BORDER | NOT WS_TABSTOP
|
||||
DEFPUSHBUTTON "Close",IDOK,191,259,86,14
|
||||
CONTROL 1201,0,"Static",SS_BITMAP,3,3,101,197
|
||||
EDITTEXT 1200,112,3,231,158,ES_MULTILINE | ES_READONLY | NOT
|
||||
WS_BORDER | NOT WS_TABSTOP
|
||||
DEFPUSHBUTTON "Close",IDOK,175,172,86,14
|
||||
END
|
||||
#else
|
||||
IDD_ABOUT_DIALOG DIALOG DISCARDABLE 0, 0, 268, 362
|
||||
200 DIALOG DISCARDABLE 0, 0, 268, 239
|
||||
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION |
|
||||
WS_SYSMENU
|
||||
CAPTION "About"
|
||||
FONT 8, "MS Sans Serif"
|
||||
BEGIN
|
||||
EDITTEXT IDC_ABOUT_TEXT,16,18,234,315,ES_MULTILINE | ES_READONLY |
|
||||
NOT WS_BORDER | NOT WS_TABSTOP
|
||||
DEFPUSHBUTTON "Close",IDOK,90,339,86,14
|
||||
EDITTEXT 1200,16,18,234,183,ES_MULTILINE | ES_READONLY | NOT
|
||||
WS_BORDER | NOT WS_TABSTOP
|
||||
DEFPUSHBUTTON "Close",IDOK,90,213,86,14
|
||||
END
|
||||
#endif
|
||||
|
||||
IDD_UPDATE_DIALOG DIALOG DISCARDABLE 0, 0, 409, 87
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Check for update"
|
||||
FONT 8, "MS Sans Serif"
|
||||
BEGIN
|
||||
CTEXT "Checking for update",IDC_UPDATE_INFO1,7,15,394,10
|
||||
CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER,7,
|
||||
38,395,14
|
||||
DEFPUSHBUTTON "Next",IDC_BUTTON_NEXT,279,65,60,14
|
||||
PUSHBUTTON "Cancel",IDC_BUTTON_CANCEL,342,65,60,14
|
||||
CTEXT "url",IDC_UPDATE_INFO2,7,26,394,8
|
||||
CONTROL "Always check for the update on sturtup",
|
||||
IDC_CHECK_UPDATE_STURTUP,"Button",BS_AUTOCHECKBOX |
|
||||
WS_TABSTOP,7,67,269,10
|
||||
END
|
||||
|
||||
#ifndef TTCALC_PORTABLE
|
||||
IDB_BITMAP_ABOUT BITMAP "..\\res\\aboutbox.bmp"
|
||||
1201 BITMAP "..\\res\\abacus_01.bmp"
|
||||
#endif
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -43,10 +43,8 @@
|
|||
\brief it tells us whether there was a stop signal or not
|
||||
*/
|
||||
|
||||
#include "compileconfig.h"
|
||||
#include <ttmath/ttmathtypes.h>
|
||||
#include <windows.h>
|
||||
#include <cstdio>
|
||||
|
||||
|
||||
/*!
|
||||
|
|
552
src/tabs.cpp
552
src/tabs.cpp
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -56,176 +56,6 @@ void PrintErrorCode()
|
|||
GetPrgRes()->GetLanguages()->ErrorMessage(last_code) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int CalcBracketsPrev(const char * buf, int start)
|
||||
{
|
||||
int last;
|
||||
int brackets;
|
||||
|
||||
last = start;
|
||||
--start;
|
||||
|
||||
while( true )
|
||||
{
|
||||
for( ; start>=0 && buf[start]!=';' ; --start )
|
||||
if( buf[start] != ' ' )
|
||||
last = start;
|
||||
|
||||
if( start <= 0 )
|
||||
return last;
|
||||
|
||||
--start; // skipping a semicolon
|
||||
brackets = 0;
|
||||
|
||||
for( ; start>=0 ; --start )
|
||||
{
|
||||
if( buf[start] == '(' )
|
||||
++brackets;
|
||||
else
|
||||
if( buf[start] == ')' )
|
||||
--brackets;
|
||||
|
||||
if( brackets > 0 )
|
||||
{
|
||||
last = start;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int CalcBracketsNext(const char * buf, int size, int start)
|
||||
{
|
||||
int last;
|
||||
int brackets;
|
||||
|
||||
if( start >= size )
|
||||
return size;
|
||||
|
||||
last = start;
|
||||
|
||||
while( true )
|
||||
{
|
||||
for( ; start<size && buf[start]!=';' ; ++start )
|
||||
if( buf[start] != ' ' )
|
||||
last = start;
|
||||
|
||||
if( start >= size )
|
||||
{
|
||||
if( buf[last] == ';' || buf[last] == ' ' )
|
||||
return last;
|
||||
else
|
||||
return last+1;
|
||||
}
|
||||
|
||||
++start; // skipping a semicolon
|
||||
brackets = 0;
|
||||
|
||||
for( ; start<size ; ++start )
|
||||
{
|
||||
if( buf[start] == '(' )
|
||||
++brackets;
|
||||
else
|
||||
if( buf[start] == ')' )
|
||||
--brackets;
|
||||
|
||||
if( brackets < 0 )
|
||||
{
|
||||
last = start;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool IsWhite(int c)
|
||||
{
|
||||
return c==' ' || c=='\t';
|
||||
}
|
||||
|
||||
|
||||
bool IsOpeningOperand(int c)
|
||||
{
|
||||
return c=='-' || c=='+' || c=='*' ||c=='/' || c=='%' ||c=='^' || c=='(';
|
||||
}
|
||||
|
||||
|
||||
bool IsOpeningOperandBefore(const char * buf, int end)
|
||||
{
|
||||
while( end > 0 && IsWhite(buf[end-1]) )
|
||||
end -= 1;
|
||||
|
||||
if( end == 0 )
|
||||
return false;
|
||||
|
||||
return IsOpeningOperand(buf[end-1]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CalcBracketsPos(HWND input, int & start, int & end)
|
||||
{
|
||||
DWORD sel_start, sel_end;
|
||||
|
||||
SendMessage(input, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
|
||||
|
||||
start = sel_start;
|
||||
end = sel_end;
|
||||
|
||||
if( start != end )
|
||||
return;
|
||||
|
||||
char * buf = GetPrgRes()->GetBufferTemp();
|
||||
int len = SendMessage(input, WM_GETTEXT, GetPrgRes()->GetBufferSize(), (LPARAM)buf);
|
||||
|
||||
if( len > 0 && !IsOpeningOperandBefore(buf, end) )
|
||||
{
|
||||
start = CalcBracketsPrev(buf, sel_start);
|
||||
end = CalcBracketsNext(buf, len, sel_start);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void InsertText(const char * first, const char * last, int cursor_back = 0)
|
||||
{
|
||||
HWND input = GetDlgItem(GetPrgRes()->GetMainWindow(), IDC_INPUT_EDIT);
|
||||
|
||||
int start, end;
|
||||
CalcBracketsPos(input, start, end);
|
||||
|
||||
size_t len_first = strlen(first);
|
||||
|
||||
SendMessage(input, EM_SETSEL, start, start);
|
||||
SendMessage(input, EM_REPLACESEL, 1, LPARAM(first));
|
||||
|
||||
SendMessage(input, EM_SETSEL, end+len_first, end+len_first);
|
||||
SendMessage(input, EM_REPLACESEL, 1, LPARAM(last));
|
||||
|
||||
if( start == end )
|
||||
{
|
||||
// was empty string - we're setting the cursor inside the texts
|
||||
SendMessage(input, EM_SETSEL, end+len_first, end+len_first);
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t len_last = strlen(last);
|
||||
SendMessage(input, EM_SETSEL, end+len_first+len_last-cursor_back, end+len_first+len_last-cursor_back);
|
||||
}
|
||||
|
||||
SetFocus(input);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
this functions inserts a given string into the first edit control
|
||||
and then moves the caret
|
||||
|
@ -287,7 +117,7 @@ return true;
|
|||
|
||||
BOOL WmTabCommand_Press_sin(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("sin(", ")");
|
||||
InsertText("sin()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -295,7 +125,7 @@ return true;
|
|||
|
||||
BOOL WmTabCommand_Press_cos(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("cos(", ")");
|
||||
InsertText("cos()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -303,7 +133,7 @@ return true;
|
|||
|
||||
BOOL WmTabCommand_Press_tan(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("tan(", ")");
|
||||
InsertText("tan()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -311,7 +141,7 @@ return true;
|
|||
|
||||
BOOL WmTabCommand_Press_cot(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("cot(", ")");
|
||||
InsertText("cot()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -319,7 +149,7 @@ return true;
|
|||
|
||||
BOOL WmTabCommand_Press_ln(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("ln(", ")");
|
||||
InsertText("ln()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -327,7 +157,7 @@ return true;
|
|||
|
||||
BOOL WmTabCommand_Press_log(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("log(", " ; )", 1);
|
||||
InsertText("log( ; )",-4);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -335,7 +165,7 @@ return true;
|
|||
|
||||
BOOL WmTabCommand_Press_abs(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("abs(", ")");
|
||||
InsertText("abs()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -343,7 +173,7 @@ return true;
|
|||
|
||||
BOOL WmTabCommand_Press_factorial(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("factorial(", ")");
|
||||
InsertText("factorial()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -397,9 +227,6 @@ return true;
|
|||
BOOL WmTabCommand_Press_clear(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
SetDlgItemText(GetPrgRes()->GetMainWindow(), IDC_INPUT_EDIT, "");
|
||||
|
||||
HWND input_edit = GetDlgItem( GetPrgRes()->GetMainWindow(), IDC_INPUT_EDIT );
|
||||
SetFocus(input_edit);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -410,53 +237,46 @@ BOOL WmTabCommand_Press_error(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
if( last_code != ttmath::err_ok )
|
||||
{
|
||||
PrintErrorCode();
|
||||
HWND input_edit = GetDlgItem( GetPrgRes()->GetMainWindow(), IDC_INPUT_EDIT );
|
||||
SetFocus(input_edit);
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_asin(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("asin(", ")");
|
||||
InsertText("asin()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmTabCommand_Press_acos(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("acos(", ")");
|
||||
InsertText("acos()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmTabCommand_Press_atan(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("atan(", ")");
|
||||
InsertText("atan()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmTabCommand_Press_acot(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("acot(", ")");
|
||||
InsertText("acot()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmTabCommand_Press_sgn(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("sgn(", ")");
|
||||
InsertText("sgn()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmTabCommand_Press_mod(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("mod(", " ; )", 1);
|
||||
InsertText("mod(;)",-2);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -472,7 +292,7 @@ return true;
|
|||
|
||||
BOOL WmTabCommand_Press_int(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("int(", ")");
|
||||
InsertText("int()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -480,7 +300,7 @@ return true;
|
|||
|
||||
BOOL WmTabCommand_Press_round(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("round(", ")");
|
||||
InsertText("round()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -488,7 +308,7 @@ return true;
|
|||
|
||||
BOOL WmTabCommand_Press_exp(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("exp(", ")");
|
||||
InsertText("exp()",-1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -523,24 +343,6 @@ BOOL WmTabCommand_IDCANCEL(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
// pos is the 'grouping' position (0 means none)
|
||||
void SetDisablingGroupingDigits(HWND hWnd, int pos = -1)
|
||||
{
|
||||
if( pos < 0 )
|
||||
pos = SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING, CB_GETCURSEL, 0, 0);
|
||||
|
||||
if( pos <= 0 )
|
||||
{
|
||||
EnableWindow(GetDlgItem(hWnd, IDC_COMBO_DISPLAY_GROUPING_DIGITS), false);
|
||||
}
|
||||
else
|
||||
{
|
||||
EnableWindow(GetDlgItem(hWnd, IDC_COMBO_DISPLAY_GROUPING_DIGITS), true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SetLanguageTabStandard(HWND hWnd)
|
||||
{
|
||||
SetDlgItemText( hWnd,IDC_BUTTON_CLEAR, GetPrgRes()->GetLanguages()->GuiMessage(Languages::button_clear) );
|
||||
|
@ -604,108 +406,48 @@ void SetLanguageTabPrecision(HWND hWnd)
|
|||
}
|
||||
|
||||
|
||||
void SetLanguageTabDisplayComboRounding(HWND hWnd)
|
||||
void SetLanguageTabDisplay(HWND hWnd)
|
||||
{
|
||||
char buffer[50];
|
||||
int i;
|
||||
const int max_r = 9;
|
||||
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_ROUNDING, CB_RESETCONTENT, 0, 0);
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_ROUNDING, CB_ADDSTRING, 0, (LPARAM)pl->GuiMessage(Languages::combo_rounding_none) );
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_ROUNDING, CB_ADDSTRING, 0, (LPARAM)pl->GuiMessage(Languages::combo_rounding_integer) );
|
||||
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_ROUNDING, CB_ADDSTRING, 0, (LPARAM)GetPrgRes()->GetLanguages()->GuiMessage(Languages::combo_rounding_none) );
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_ROUNDING, CB_ADDSTRING, 0, (LPARAM)GetPrgRes()->GetLanguages()->GuiMessage(Languages::combo_rounding_integer) );
|
||||
|
||||
const int max_r = 9;
|
||||
for(i=1 ; i<=max_r ; ++i)
|
||||
{
|
||||
sprintf(buffer,"%s %d %s",
|
||||
pl->GuiMessage(Languages::combo_rounding_to_number),
|
||||
GetPrgRes()->GetLanguages()->GuiMessage(Languages::combo_rounding_to_number),
|
||||
i,
|
||||
pl->GuiMessage(Languages::combo_rounding_after_comma) );
|
||||
GetPrgRes()->GetLanguages()->GuiMessage(Languages::combo_rounding_after_comma) );
|
||||
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_ROUNDING, CB_ADDSTRING, 0, (LPARAM)buffer);
|
||||
}
|
||||
|
||||
int r = GetPrgRes()->GetDisplayRounding();
|
||||
|
||||
if( r > max_r )
|
||||
r = max_r;
|
||||
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_ROUNDING, CB_SETCURSEL, r+1, 0);
|
||||
}
|
||||
|
||||
|
||||
void SetLanguageTabDisplayComboGrouping(HWND hWnd)
|
||||
{
|
||||
char buffer[50];
|
||||
int i;
|
||||
const int max_r = 9;
|
||||
SetDlgItemText(hWnd, IDC_LABEL_DISPLAY_INPUT, GetPrgRes()->GetLanguages()->GuiMessage(Languages::display_input));
|
||||
SetDlgItemText(hWnd, IDC_LABEL_DISPLAY_OUTPUT, GetPrgRes()->GetLanguages()->GuiMessage(Languages::display_output));
|
||||
SetDlgItemText(hWnd, IDC_LABEL_DISPLAY_ROUNDING, GetPrgRes()->GetLanguages()->GuiMessage(Languages::display_rounding));
|
||||
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
SetDlgItemText(hWnd, IDC_RADIO_DISPLAY_ALWAYS_SCIENTIFIC, GetPrgRes()->GetLanguages()->GuiMessage(Languages::display_always_scientific));
|
||||
SetDlgItemText(hWnd, IDC_RADIO_DISPLAY_NOT_ALWAYS_SCIENTIFIC, GetPrgRes()->GetLanguages()->GuiMessage(Languages::display_not_always_scientific));
|
||||
|
||||
// grouping
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING, CB_RESETCONTENT, 0, 0);
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING, CB_ADDSTRING, 0, (LPARAM)pl->GuiMessage(Languages::display_grouping_none));
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING, CB_ADDSTRING, 0, (LPARAM)pl->GuiMessage(Languages::display_grouping_space));
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING, CB_ADDSTRING, 0, (LPARAM)" `");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING, CB_ADDSTRING, 0, (LPARAM)" '");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING, CB_ADDSTRING, 0, (LPARAM)" .");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING, CB_ADDSTRING, 0, (LPARAM)" ,");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING, CB_SETCURSEL, GetPrgRes()->GetGrouping(), 0);
|
||||
SetDlgItemText(hWnd, IDC_LABEL_GROUP_SCIENTIFIC, GetPrgRes()->GetLanguages()->GuiMessage(Languages::display_group_scientific));
|
||||
|
||||
// grouping digits
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING_DIGITS, CB_RESETCONTENT, 0, 0);
|
||||
SetDlgItemText(hWnd, IDC_LABEL_DECIMAL_POINT, GetPrgRes()->GetLanguages()->GuiMessage(Languages::display_decimal_point));
|
||||
|
||||
for(i=1 ; i<=max_r ; ++i)
|
||||
{
|
||||
sprintf(buffer,"%d %s", i, pl->GuiMessage(Languages::display_grouping_digits) );
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING_DIGITS, CB_ADDSTRING, 0, (LPARAM)buffer);
|
||||
}
|
||||
|
||||
int r = GetPrgRes()->GetGroupingDigits();
|
||||
|
||||
if( r > max_r )
|
||||
r = max_r;
|
||||
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING_DIGITS, CB_SETCURSEL, r-1, 0);
|
||||
}
|
||||
|
||||
|
||||
void SetLanguageTabDisplay(HWND hWnd)
|
||||
{
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
|
||||
SetLanguageTabDisplayComboRounding(hWnd);
|
||||
SetLanguageTabDisplayComboGrouping(hWnd);
|
||||
SetDisablingGroupingDigits(hWnd, GetPrgRes()->GetGrouping());
|
||||
|
||||
SetDlgItemText(hWnd, IDC_LABEL_DISPLAY_INPUT, pl->GuiMessage(Languages::display_input));
|
||||
SetDlgItemText(hWnd, IDC_LABEL_DISPLAY_OUTPUT, pl->GuiMessage(Languages::display_output));
|
||||
SetDlgItemText(hWnd, IDC_LABEL_DISPLAY_ROUNDING, pl->GuiMessage(Languages::display_rounding));
|
||||
SetDlgItemText(hWnd, IDC_LABEL_DISPLAY_GROUPING, pl->GuiMessage(Languages::display_grouping));
|
||||
SetDlgItemText(hWnd, IDC_LABEL_INPUT_DECIMAL_POINT, pl->GuiMessage(Languages::display_input_decimal_point));
|
||||
SetDlgItemText(hWnd, IDC_LABEL_OUTPUT_DECIMAL_POINT, pl->GuiMessage(Languages::display_output_decimal_point));
|
||||
SetDlgItemText(hWnd, IDC_LABEL_PARAM_SEPARATE, pl->GuiMessage(Languages::display_param_sep));
|
||||
|
||||
SetDlgItemText(hWnd, IDC_RADIO_DISPLAY_ALWAYS_SCIENTIFIC, pl->GuiMessage(Languages::display_always_scientific));
|
||||
SetDlgItemText(hWnd, IDC_RADIO_DISPLAY_NOT_ALWAYS_SCIENTIFIC, pl->GuiMessage(Languages::display_not_always_scientific));
|
||||
|
||||
SetDlgItemText(hWnd, IDC_LABEL_DISPLAY_SCIENTIFIC, pl->GuiMessage(Languages::display_as_scientific));
|
||||
SetDlgItemText(hWnd, IDC_CHECK_REMOVE_ZEROES, pl->GuiMessage(Languages::check_remove_zeroes));
|
||||
SetDlgItemText(hWnd, IDC_LABEL_DISPLAY_DEG_RAD_GRAD, pl->GuiMessage(Languages::display_deg_rad_grad));
|
||||
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_INPUT_DECIMAL_POINT, CB_RESETCONTENT, 0, 0);
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_INPUT_DECIMAL_POINT, CB_ADDSTRING, 0, (LPARAM)pl->GuiMessage(Languages::display_input_decimal_point_item1));
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_INPUT_DECIMAL_POINT, CB_ADDSTRING, 0, (LPARAM)" .");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_INPUT_DECIMAL_POINT, CB_ADDSTRING, 0, (LPARAM)" ,");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_INPUT_DECIMAL_POINT, CB_SETCURSEL, GetPrgRes()->GetInputDecimalPoint(), 0);
|
||||
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_PARAM_SEPARATE, CB_RESETCONTENT, 0, 0);
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_PARAM_SEPARATE, CB_ADDSTRING, 0, (LPARAM)" ;");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_PARAM_SEPARATE, CB_ADDSTRING, 0, (LPARAM)pl->GuiMessage(Languages::display_param_sep_item2));
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_PARAM_SEPARATE, CB_ADDSTRING, 0, (LPARAM)pl->GuiMessage(Languages::display_param_sep_item3));
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_PARAM_SEPARATE, CB_SETCURSEL, GetPrgRes()->GetParamSep(), 0);
|
||||
SetDlgItemText(hWnd, IDC_CHECK_REMOVE_ZEROES, GetPrgRes()->GetLanguages()->GuiMessage(Languages::check_remove_zeroes));
|
||||
|
||||
SetDlgItemText(hWnd, IDC_LABEL_DISPLAY_DEG_RAD_GRAD, GetPrgRes()->GetLanguages()->GuiMessage(Languages::display_deg_rad_grad));
|
||||
}
|
||||
|
||||
|
||||
|
@ -958,7 +700,6 @@ TCITEM tab;
|
|||
}
|
||||
|
||||
|
||||
|
||||
BOOL WmTabCommand_SetPrecision1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
#ifndef TTCALC_PORTABLE
|
||||
|
@ -1048,7 +789,7 @@ BOOL WmTabCommand_DisplayDecimalPointChanged(HWND hWnd, UINT message, WPARAM wPa
|
|||
return false;
|
||||
|
||||
GetPrgRes()->GetThreadController()->StopCalculating();
|
||||
GetPrgRes()->SetDecimalPoint( (int)SendDlgItemMessage(hWnd, IDC_COMBO_OUTPUT_DECIMAL_POINT, CB_GETCURSEL, 0, 0) );
|
||||
GetPrgRes()->SetDecimalPoint( (int)SendDlgItemMessage(hWnd, IDC_COMBO_DECIMAL_POINT, CB_GETCURSEL, 0, 0) );
|
||||
GetPrgRes()->GetThreadController()->StartCalculating();
|
||||
|
||||
return true;
|
||||
|
@ -1081,7 +822,6 @@ BOOL WmTabCommand_RemoveZeroesChanged(HWND hWnd, UINT message, WPARAM wParam, LP
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_DisplayDegRadGradChanged(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if( HIWORD(wParam) != CBN_SELCHANGE )
|
||||
|
@ -1110,53 +850,6 @@ void SetDisablingDisplayWhenScientific(HWND hWnd)
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
BOOL WmTabCommand_DisplayGrouping(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if( HIWORD(wParam) != CBN_SELCHANGE )
|
||||
return false;
|
||||
|
||||
GetPrgRes()->GetThreadController()->StopCalculating();
|
||||
GetPrgRes()->SetGrouping( (int)SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING, CB_GETCURSEL, 0, 0) );
|
||||
GetPrgRes()->SetGroupingDigits( (int)SendDlgItemMessage(hWnd, IDC_COMBO_DISPLAY_GROUPING_DIGITS, CB_GETCURSEL, 0, 0) + 1 );
|
||||
GetPrgRes()->GetThreadController()->StartCalculating();
|
||||
|
||||
SetDisablingGroupingDigits(hWnd, GetPrgRes()->GetGrouping());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_DisplayInputDecimalPoint(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if( HIWORD(wParam) != CBN_SELCHANGE )
|
||||
return false;
|
||||
|
||||
GetPrgRes()->GetThreadController()->StopCalculating();
|
||||
GetPrgRes()->SetInputDecimalPoint( (int)SendDlgItemMessage(hWnd, IDC_COMBO_INPUT_DECIMAL_POINT, CB_GETCURSEL, 0, 0) );
|
||||
GetPrgRes()->GetThreadController()->StartCalculating();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOL WmTabCommand_DisplayParamSep(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if( HIWORD(wParam) != CBN_SELCHANGE )
|
||||
return false;
|
||||
|
||||
GetPrgRes()->GetThreadController()->StopCalculating();
|
||||
GetPrgRes()->SetParamSep( (int)SendDlgItemMessage(hWnd, IDC_COMBO_PARAM_SEPARATE, CB_GETCURSEL, 0, 0) );
|
||||
GetPrgRes()->GetThreadController()->StartCalculating();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
BOOL WmTabCommand_SetDisplayAlwaysScientific(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
// there are another messages besides that one
|
||||
|
@ -1226,113 +919,7 @@ return true;
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_bracketsall(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("(", ")");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_1div_bracketsall(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("1/(", ")");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_semicolon(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText(" ; ", 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_percentage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("%", 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_floor(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("floor(", ")");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_ceil(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("ceil(", ")");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_min(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("min(", ")");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_max(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("max(", ")");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_avg(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("avg(", ")");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_sum(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("sum(", ")");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_root(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("root(", " ; )", 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL WmTabCommand_Press_gamma(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("gamma(", ")");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL WmTabCommand_Press_sqrt(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
InsertText("sqrt(", ")");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CreateTabCommandMessagesTable(Messages<BOOL> & cmessages)
|
||||
void CreateTabCommandMessagesTable(Messages & cmessages)
|
||||
{
|
||||
cmessages.Associate(IDC_BUTTON_PRESS_0, WmTabCommand_Press_0_9);
|
||||
cmessages.Associate(IDC_BUTTON_PRESS_1, WmTabCommand_Press_0_9);
|
||||
|
@ -1356,16 +943,6 @@ void CreateTabCommandMessagesTable(Messages<BOOL> & cmessages)
|
|||
cmessages.Associate(IDC_BUTTON_LOG, WmTabCommand_Press_log);
|
||||
cmessages.Associate(IDC_BUTTON_ABS, WmTabCommand_Press_abs);
|
||||
cmessages.Associate(IDC_BUTTON_FACTORIAL, WmTabCommand_Press_factorial);
|
||||
cmessages.Associate(IDC_BUTTON_SEMICOLON, WmTabCommand_Press_semicolon);
|
||||
cmessages.Associate(IDC_BUTTON_PERCENTAGE, WmTabCommand_Press_percentage);
|
||||
cmessages.Associate(IDC_BUTTON_FLOOR, WmTabCommand_Press_floor);
|
||||
cmessages.Associate(IDC_BUTTON_CEIL, WmTabCommand_Press_ceil);
|
||||
cmessages.Associate(IDC_BUTTON_MIN, WmTabCommand_Press_min);
|
||||
cmessages.Associate(IDC_BUTTON_MAX, WmTabCommand_Press_max);
|
||||
cmessages.Associate(IDC_BUTTON_AVG, WmTabCommand_Press_avg);
|
||||
cmessages.Associate(IDC_BUTTON_SUM, WmTabCommand_Press_sum);
|
||||
cmessages.Associate(IDC_BUTTON_ROOT, WmTabCommand_Press_root);
|
||||
cmessages.Associate(IDC_BUTTON_GAMMA, WmTabCommand_Press_gamma);
|
||||
|
||||
|
||||
|
||||
|
@ -1386,14 +963,11 @@ void CreateTabCommandMessagesTable(Messages<BOOL> & cmessages)
|
|||
cmessages.Associate(IDC_BUTTON_SGN, WmTabCommand_Press_sgn);
|
||||
cmessages.Associate(IDC_BUTTON_MOD, WmTabCommand_Press_mod);
|
||||
|
||||
|
||||
cmessages.Associate(IDC_BUTTON_POWER, WmTabCommand_Press_power);
|
||||
cmessages.Associate(IDC_BUTTON_INT, WmTabCommand_Press_int);
|
||||
cmessages.Associate(IDC_BUTTON_ROUND, WmTabCommand_Press_round);
|
||||
cmessages.Associate(IDC_BUTTON_EXP, WmTabCommand_Press_exp);
|
||||
cmessages.Associate(IDC_BUTTON_BRACKETS_ALL, WmTabCommand_Press_bracketsall);
|
||||
cmessages.Associate(IDC_BUTTON_1DIV_BRACKETS_ALL, WmTabCommand_Press_1div_bracketsall);
|
||||
cmessages.Associate(IDC_BUTTON_SQRT, WmTabCommand_Press_sqrt);
|
||||
|
||||
|
||||
cmessages.Associate(IDC_BUTTON_ADD_VARIABLE, Variables::WmTabCommand_AddVariable);
|
||||
cmessages.Associate(IDC_BUTTON_EDIT_VARIABLE, Variables::WmTabCommand_EditVariable);
|
||||
|
@ -1418,15 +992,13 @@ void CreateTabCommandMessagesTable(Messages<BOOL> & cmessages)
|
|||
cmessages.Associate(IDC_COMBO_DISPLAY_OUTPUT, WmTabCommand_DisplayOutputChanged);
|
||||
cmessages.Associate(IDC_COMBO_DISPLAY_ROUNDING, WmTabCommand_DisplayRoundingChanged);
|
||||
cmessages.Associate(IDC_CHECK_REMOVE_ZEROES, WmTabCommand_RemoveZeroesChanged);
|
||||
|
||||
cmessages.Associate(IDC_RADIO_DISPLAY_ALWAYS_SCIENTIFIC, WmTabCommand_SetDisplayAlwaysScientific);
|
||||
cmessages.Associate(IDC_RADIO_DISPLAY_NOT_ALWAYS_SCIENTIFIC, WmTabCommand_SetDisplayNotAlwaysScientific);
|
||||
cmessages.Associate(IDC_EDIT_DISPLAY_WHEN_SCIENTIFIC, WmTabCommand_SetDisplayWhenScientific);
|
||||
cmessages.Associate(IDC_COMBO_OUTPUT_DECIMAL_POINT, WmTabCommand_DisplayDecimalPointChanged);
|
||||
cmessages.Associate(IDC_COMBO_DECIMAL_POINT, WmTabCommand_DisplayDecimalPointChanged);
|
||||
cmessages.Associate(IDC_COMBO_DEG_RAD_GRAD, WmTabCommand_DisplayDegRadGradChanged);
|
||||
cmessages.Associate(IDC_COMBO_DISPLAY_GROUPING, WmTabCommand_DisplayGrouping);
|
||||
cmessages.Associate(IDC_COMBO_DISPLAY_GROUPING_DIGITS, WmTabCommand_DisplayGrouping);
|
||||
cmessages.Associate(IDC_COMBO_INPUT_DECIMAL_POINT, WmTabCommand_DisplayInputDecimalPoint);
|
||||
cmessages.Associate(IDC_COMBO_PARAM_SEPARATE, WmTabCommand_DisplayParamSep);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1434,7 +1006,7 @@ void CreateTabCommandMessagesTable(Messages<BOOL> & cmessages)
|
|||
*/
|
||||
BOOL WmTabCommand(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static Messages<BOOL> command_messages;
|
||||
static Messages command_messages;
|
||||
|
||||
if( command_messages.Empty() )
|
||||
// initiation
|
||||
|
@ -1563,19 +1135,16 @@ BOOL WmInitTabVariables(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
{
|
||||
HWND list = GetDlgItem(hWnd, IDC_VARIABLES_LIST);
|
||||
LVCOLUMN column;
|
||||
RECT r;
|
||||
|
||||
GetWindowRect(list, &r);
|
||||
|
||||
int list_cx = r.right - r.left;
|
||||
int header1_cx = 70;
|
||||
//int list_cx = SetSizeOfList(list);
|
||||
int list_cx = 280;
|
||||
|
||||
column.mask = LVCF_TEXT | LVCF_WIDTH;
|
||||
column.cx = header1_cx;
|
||||
column.cx = 60;
|
||||
column.pszText = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::list_variables_header_1) );
|
||||
ListView_InsertColumn(list, 0, &column);
|
||||
|
||||
column.cx = list_cx - header1_cx;
|
||||
column.cx = list_cx - 60 - 10;
|
||||
column.pszText = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::list_variables_header_2) );
|
||||
ListView_InsertColumn(list, 1, &column);
|
||||
|
||||
|
@ -1592,24 +1161,20 @@ BOOL WmInitTabFunctions(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
{
|
||||
HWND list = GetDlgItem(hWnd, IDC_FUNCTIONS_LIST);
|
||||
LVCOLUMN column;
|
||||
RECT r;
|
||||
|
||||
GetWindowRect(list, &r);
|
||||
|
||||
int list_cx = r.right - r.left;
|
||||
int header1_cx = 70;
|
||||
int header2_cx = 70;
|
||||
//int list_cx = SetSizeOfList(list);
|
||||
int list_cx = 280;
|
||||
|
||||
column.mask = LVCF_TEXT | LVCF_WIDTH;
|
||||
column.cx = header1_cx;
|
||||
column.cx = 60;
|
||||
column.pszText = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::list_functions_header_1) );
|
||||
ListView_InsertColumn(list, 0, &column);
|
||||
|
||||
column.cx = header2_cx;
|
||||
column.cx = 40;
|
||||
column.pszText = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::list_functions_header_2) );
|
||||
ListView_InsertColumn(list, 1, &column);
|
||||
|
||||
column.cx = list_cx - header1_cx - header2_cx;
|
||||
column.cx = list_cx - 60 - 40 - 10;
|
||||
column.pszText = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::list_functions_header_3) );
|
||||
ListView_InsertColumn(list, 2, &column);
|
||||
|
||||
|
@ -1678,7 +1243,6 @@ char buffer[20];
|
|||
CheckDlgButton(hWnd, IDC_RADIO_DISPLAY_NOT_ALWAYS_SCIENTIFIC, BST_CHECKED);
|
||||
|
||||
SetDisablingDisplayWhenScientific(hWnd);
|
||||
SetDisablingGroupingDigits(hWnd);
|
||||
|
||||
SendDlgItemMessage(hWnd, IDC_UPDOWN_DISPLAY_WHEN_SCIENTIFIC, UDM_SETBASE, 10,0);
|
||||
SendDlgItemMessage(hWnd, IDC_UPDOWN_DISPLAY_WHEN_SCIENTIFIC, UDM_SETRANGE, 0, MAKELONG(99,1));
|
||||
|
@ -1689,17 +1253,21 @@ char buffer[20];
|
|||
sprintf(buffer,"%d", GetPrgRes()->GetDisplayWhenScientific());
|
||||
SetDlgItemText(hWnd, IDC_EDIT_DISPLAY_WHEN_SCIENTIFIC, buffer);
|
||||
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_OUTPUT_DECIMAL_POINT, CB_ADDSTRING, 0, (LPARAM)" .");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_OUTPUT_DECIMAL_POINT, CB_ADDSTRING, 0, (LPARAM)" ,");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_OUTPUT_DECIMAL_POINT, CB_SETCURSEL, GetPrgRes()->GetDecimalPoint(), 0);
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DECIMAL_POINT, CB_ADDSTRING, 0, (LPARAM)" .");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DECIMAL_POINT, CB_ADDSTRING, 0, (LPARAM)" ,");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DECIMAL_POINT, CB_SETCURSEL, GetPrgRes()->GetDecimalPoint(), 0);
|
||||
|
||||
if( GetPrgRes()->GetRemovingZeroes() )
|
||||
CheckDlgButton(hWnd, IDC_CHECK_REMOVE_ZEROES, BST_CHECKED);
|
||||
|
||||
|
||||
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DEG_RAD_GRAD, CB_ADDSTRING, 0, (LPARAM)"deg");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DEG_RAD_GRAD, CB_ADDSTRING, 0, (LPARAM)"rad");
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DEG_RAD_GRAD, CB_ADDSTRING, 0, (LPARAM)"grad");
|
||||
|
||||
SendDlgItemMessage(hWnd, IDC_COMBO_DEG_RAD_GRAD, CB_SETCURSEL, GetPrgRes()->GetDegRadGrad(), 0);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1820,7 +1388,7 @@ return false;
|
|||
|
||||
|
||||
|
||||
void CreateTabMessagesTable(Messages<BOOL> & messages)
|
||||
void CreateTabMessagesTable(Messages & messages)
|
||||
{
|
||||
messages.Associate(WM_INITDIALOG, WmTabInitDialog);
|
||||
messages.Associate(WM_COMMAND, WmTabCommand);
|
||||
|
@ -1844,7 +1412,7 @@ void CreateTabMessagesTable(Messages<BOOL> & messages)
|
|||
|
||||
BOOL CALLBACK TabWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static Messages<BOOL> messages;
|
||||
static Messages messages;
|
||||
|
||||
if( messages.Empty() )
|
||||
// initiation
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -49,6 +49,12 @@
|
|||
#include "programresources.h"
|
||||
|
||||
|
||||
#define WM_INIT_TAB_VARIABLES WM_APP
|
||||
#define WM_INIT_TAB_FUNCTIONS WM_APP+1
|
||||
#define WM_INIT_TAB_PRECISION WM_APP+2
|
||||
#define WM_INIT_TAB_DISPLAY WM_APP+3
|
||||
#define WM_SET_LAST_ERROR WM_APP+4
|
||||
#define WM_INIT_TAB_CONVERT WM_APP+5
|
||||
|
||||
namespace TabWindowFunctions
|
||||
{
|
||||
|
|
|
@ -1,151 +0,0 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2008, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name Tomasz Sowa nor the names of contributors to this
|
||||
* project may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "threadcontroller.h"
|
||||
#include <cstdio>
|
||||
|
||||
|
||||
|
||||
ThreadController::ThreadController()
|
||||
{
|
||||
calculations = 0;
|
||||
ready_for_stop = 0;
|
||||
exit_thread = false;
|
||||
}
|
||||
|
||||
|
||||
ThreadController::~ThreadController()
|
||||
{
|
||||
if(calculations) CloseHandle(calculations);
|
||||
if(ready_for_stop) CloseHandle(ready_for_stop);
|
||||
}
|
||||
|
||||
|
||||
bool ThreadController::Init() volatile
|
||||
{
|
||||
char * buffer = new char[300];
|
||||
|
||||
// with 'GetTickCount()' we're generating an unique identifier of our event
|
||||
// (there can be another window of ttcalc)
|
||||
sprintf((char*)buffer,"TTCalcEventForManagingThreads9928%u",
|
||||
(unsigned int)GetTickCount());
|
||||
|
||||
// 'calculations' will be for auto-reseting and initialized as non-signaled
|
||||
if( (calculations = CreateEvent(0,false,false,(char*)buffer))==NULL)
|
||||
{
|
||||
delete [] buffer;
|
||||
return false;
|
||||
}
|
||||
|
||||
sprintf((char*)buffer,"TTCalcEventReadyForStop5567%u",
|
||||
(unsigned int)GetTickCount());
|
||||
|
||||
// 'ready_for_stop' will be for manual-reseting and initialized as signaled
|
||||
// 'manual-reset' means that we must call ResetEvent() function (from WinAPI)
|
||||
// to manually reset the state to nonsignaled
|
||||
if( (ready_for_stop = CreateEvent(0,true,true,(char*)buffer))==NULL)
|
||||
{
|
||||
delete [] buffer;
|
||||
return false;
|
||||
}
|
||||
|
||||
delete [] buffer;
|
||||
|
||||
return stop_calculating.Init();
|
||||
}
|
||||
|
||||
|
||||
void ThreadController::ReadyForStop() volatile
|
||||
{
|
||||
SetEvent( ready_for_stop );
|
||||
}
|
||||
|
||||
|
||||
void ThreadController::StopCalculatingAndExitThread() volatile
|
||||
{
|
||||
WaitForSingleObject(ready_for_stop,INFINITE);
|
||||
|
||||
stop_calculating.Stop();
|
||||
exit_thread = true;
|
||||
SetEvent(calculations);
|
||||
}
|
||||
|
||||
|
||||
void ThreadController::StopCalculating() volatile
|
||||
{
|
||||
WaitForSingleObject(ready_for_stop, INFINITE);
|
||||
|
||||
stop_calculating.Stop();
|
||||
}
|
||||
|
||||
|
||||
void ThreadController::StartCalculating() volatile
|
||||
{
|
||||
SetEvent(calculations);
|
||||
}
|
||||
|
||||
|
||||
volatile bool ThreadController::WaitForCalculatingAndBlockForStop() volatile
|
||||
{
|
||||
WaitForSingleObject(calculations,INFINITE);
|
||||
ResetEvent(ready_for_stop);
|
||||
|
||||
stop_calculating.Start();
|
||||
|
||||
return !exit_thread;
|
||||
}
|
||||
|
||||
|
||||
const volatile ttmath::StopCalculating * ThreadController::GetStopObject() volatile const
|
||||
{
|
||||
return &stop_calculating;
|
||||
}
|
||||
|
||||
|
||||
bool ThreadController::WasStopSignal() volatile const
|
||||
{
|
||||
return stop_calculating.WasStopSignal();
|
||||
}
|
||||
|
||||
|
||||
// private
|
||||
ThreadController::ThreadController(const ThreadController &)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -80,13 +80,22 @@ public:
|
|||
the default constructor
|
||||
(notice that there'll be only one object of this class)
|
||||
*/
|
||||
ThreadController();
|
||||
ThreadController()
|
||||
{
|
||||
calculations = 0;
|
||||
ready_for_stop = 0;
|
||||
exit_thread = false;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
the destructor
|
||||
*/
|
||||
~ThreadController();
|
||||
~ThreadController()
|
||||
{
|
||||
if(calculations) CloseHandle(calculations);
|
||||
if(ready_for_stop) CloseHandle(ready_for_stop);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -94,7 +103,38 @@ public:
|
|||
|
||||
we create two system event and initialize the 'stop_calculating' object
|
||||
*/
|
||||
bool Init() volatile;
|
||||
bool Init() volatile
|
||||
{
|
||||
char * buffer = new char[300];
|
||||
|
||||
// with 'GetTickCount()' we're generating an unique identifier of our event
|
||||
// (there can be another window of ttcalc)
|
||||
sprintf((char*)buffer,"TTCalcEventForManagingThreads9928%u",
|
||||
(unsigned int)GetTickCount());
|
||||
|
||||
// 'calculations' will be for auto-reseting and initialized as non-signaled
|
||||
if( (calculations = CreateEvent(0,false,false,(char*)buffer))==NULL)
|
||||
{
|
||||
delete [] buffer;
|
||||
return false;
|
||||
}
|
||||
|
||||
sprintf((char*)buffer,"TTCalcEventReadyForStop5567%u",
|
||||
(unsigned int)GetTickCount());
|
||||
|
||||
// 'ready_for_stop' will be for manual-reseting and initialized as signaled
|
||||
// 'manual-reset' means that we must call ResetEvent() function (from WinAPI)
|
||||
// to manually reset the state to nonsignaled
|
||||
if( (ready_for_stop = CreateEvent(0,true,true,(char*)buffer))==NULL)
|
||||
{
|
||||
delete [] buffer;
|
||||
return false;
|
||||
}
|
||||
|
||||
delete [] buffer;
|
||||
|
||||
return stop_calculating.Init();
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -103,7 +143,10 @@ public:
|
|||
string, user-defined variables, functions etc.) and when the second thread
|
||||
will have finished that then it call ReadyForStop() method
|
||||
*/
|
||||
void ReadyForStop() volatile;
|
||||
void ReadyForStop() volatile
|
||||
{
|
||||
SetEvent( ready_for_stop );
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -111,7 +154,14 @@ public:
|
|||
close button we call StopCalculatingAndExitThread() from the first main thread (gui),
|
||||
it means that the second thread (calculations) will finish itself
|
||||
*/
|
||||
void StopCalculatingAndExitThread() volatile;
|
||||
void StopCalculatingAndExitThread() volatile
|
||||
{
|
||||
WaitForSingleObject(ready_for_stop,INFINITE);
|
||||
|
||||
stop_calculating.Stop();
|
||||
exit_thread = true;
|
||||
SetEvent(calculations);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -122,7 +172,12 @@ public:
|
|||
of copying variables) then sets the 'stop object' for signaled and returns to
|
||||
the caller
|
||||
*/
|
||||
void StopCalculating() volatile;
|
||||
void StopCalculating() volatile
|
||||
{
|
||||
WaitForSingleObject(ready_for_stop, INFINITE);
|
||||
|
||||
stop_calculating.Stop();
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -130,49 +185,67 @@ public:
|
|||
in other words it means that the calculations will start
|
||||
(maybe now, maybe at once if the second thread is still working)
|
||||
*/
|
||||
void StartCalculating() volatile;
|
||||
void StartCalculating() volatile
|
||||
{
|
||||
SetEvent(calculations);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
this is the main method which is used by the second thread,
|
||||
if there's nothing to do this method (and the second thread as well) waits
|
||||
*/
|
||||
volatile bool WaitForCalculatingAndBlockForStop() volatile;
|
||||
volatile bool WaitForCalculatingAndBlockForStop() volatile
|
||||
{
|
||||
WaitForSingleObject(calculations,INFINITE);
|
||||
ResetEvent(ready_for_stop);
|
||||
|
||||
stop_calculating.Start();
|
||||
|
||||
return !exit_thread;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
this method returns the pointer to the 'stop object'
|
||||
it's used by the second thread during calculating
|
||||
*/
|
||||
const volatile ttmath::StopCalculating * GetStopObject() volatile const;
|
||||
const volatile ttmath::StopCalculating * GetStopObject() volatile const
|
||||
{
|
||||
return &stop_calculating;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
it returns 'true' if there was a stop signal during calculating
|
||||
the stop signal can be caused by the first thread (gui thread)
|
||||
*/
|
||||
bool WasStopSignal() volatile const;
|
||||
bool WasStopSignal() volatile const
|
||||
{
|
||||
return stop_calculating.WasStopSignal();
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
|
||||
// auto-reset, initialized as non-signaled
|
||||
HANDLE calculations;
|
||||
// auto-reset, initialized as non-signaled
|
||||
HANDLE calculations;
|
||||
|
||||
// manual-reset, initialized as signaled
|
||||
HANDLE ready_for_stop;
|
||||
// manual-reset, initialized as signaled
|
||||
HANDLE ready_for_stop;
|
||||
|
||||
bool exit_thread;
|
||||
bool exit_thread;
|
||||
|
||||
NewStopCalculating stop_calculating;
|
||||
NewStopCalculating stop_calculating;
|
||||
|
||||
|
||||
/*!
|
||||
we make the copy-constructor private so that nobody will be able
|
||||
to make a copy of the one object of this class
|
||||
*/
|
||||
ThreadController(const ThreadController &);
|
||||
|
||||
ThreadController(const ThreadController &)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
672
src/update.cpp
672
src/update.cpp
|
@ -1,672 +0,0 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name Tomasz Sowa nor the names of contributors to this
|
||||
* project may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#include "compileconfig.h"
|
||||
|
||||
#include <cstdlib>
|
||||
#include <shlobj.h>
|
||||
#include <process.h>
|
||||
|
||||
#include "update.h"
|
||||
#include "programresources.h"
|
||||
#include "messages.h"
|
||||
#include "resource.h"
|
||||
#include "languages.h"
|
||||
#include "winmain.h"
|
||||
#include "misc.h"
|
||||
|
||||
|
||||
|
||||
namespace Update
|
||||
{
|
||||
bool continue_down;
|
||||
int level;
|
||||
std::string url;
|
||||
std::string remote_file_name;
|
||||
std::string local_file_name;
|
||||
int major;
|
||||
int minor;
|
||||
int revision;
|
||||
int prerelease;
|
||||
|
||||
// this is set by another thread at the beginning
|
||||
namespace Background
|
||||
{
|
||||
std::string url_;
|
||||
std::string remote_file_name_;
|
||||
int major_;
|
||||
int minor_;
|
||||
int revision_;
|
||||
int prerelease_;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
|
||||
*/
|
||||
DownloadIni::DownloadIni()
|
||||
{
|
||||
file = 0;
|
||||
file_name = new char[MAX_PATH];
|
||||
file_name[0] = 0;
|
||||
continue_download = 0;
|
||||
}
|
||||
|
||||
|
||||
DownloadIni::~DownloadIni()
|
||||
{
|
||||
if( file )
|
||||
fclose(file);
|
||||
|
||||
DeleteTmpFile();
|
||||
|
||||
delete [] file_name;
|
||||
}
|
||||
|
||||
|
||||
void DownloadIni::DeleteTmpFile()
|
||||
{
|
||||
if( file_name[0] != 0 )
|
||||
DeleteFile(file_name);
|
||||
}
|
||||
|
||||
const char * DownloadIni::GetFileName()
|
||||
{
|
||||
return file_name;
|
||||
}
|
||||
|
||||
|
||||
FILE * DownloadIni::CreateTmpFile()
|
||||
{
|
||||
char buf[MAX_PATH];
|
||||
|
||||
file = 0;
|
||||
file_name[0] = 0;
|
||||
|
||||
if( !GetTempPath(MAX_PATH, buf) )
|
||||
return 0;
|
||||
|
||||
|
||||
if( !GetTempFileName(buf, "ttcalc_", 0, file_name) )
|
||||
{
|
||||
file_name[0] = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
file = fopen(file_name, "wb");
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
void DownloadIni::GetLen(HINTERNET conn)
|
||||
{
|
||||
char buf[100];
|
||||
DWORD buf_len = sizeof(buf);
|
||||
DWORD index = 0;
|
||||
|
||||
if( HttpQueryInfo(conn, HTTP_QUERY_CONTENT_LENGTH, buf, &buf_len, &index) )
|
||||
all_len = atoi(buf);
|
||||
else
|
||||
all_len = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool DownloadIni::Init()
|
||||
{
|
||||
if( !CreateTmpFile() )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool DownloadIni::Read(char * buffer, size_t size)
|
||||
{
|
||||
if( !file )
|
||||
return false;
|
||||
|
||||
fwrite(buffer, size, 1, file);
|
||||
CheckMessages();
|
||||
|
||||
if( continue_download && !(*continue_download) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DownloadIni::DownloadUrl(const char * url, bool * c)
|
||||
{
|
||||
continue_download = c;
|
||||
|
||||
return Download::DownloadUrl(url);
|
||||
}
|
||||
|
||||
|
||||
void DownloadIni::Close()
|
||||
{
|
||||
if( file )
|
||||
fclose(file);
|
||||
|
||||
file = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
DownloadProgram::DownloadProgram()
|
||||
{
|
||||
continue_download = 0;
|
||||
}
|
||||
|
||||
|
||||
void DownloadProgram::GetLen(HINTERNET conn)
|
||||
{
|
||||
char buf[100];
|
||||
DWORD buf_len = sizeof(buf);
|
||||
DWORD index = 0;
|
||||
|
||||
if( HttpQueryInfo(conn, HTTP_QUERY_CONTENT_LENGTH, buf, &buf_len, &index) )
|
||||
all_len = atoi(buf);
|
||||
else
|
||||
all_len = 0;
|
||||
}
|
||||
|
||||
|
||||
bool DownloadProgram::Init()
|
||||
{
|
||||
file.open(Update::local_file_name.c_str(), std::ios_base::out | std::ios_base::binary);
|
||||
|
||||
if( !file )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool DownloadProgram::Read(char * buffer, size_t size)
|
||||
{
|
||||
file.write(buffer, size);
|
||||
CheckMessages();
|
||||
|
||||
if( continue_download && !(*continue_download) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool DownloadProgram::DownloadUrl(const char * url, bool * c)
|
||||
{
|
||||
continue_download = c;
|
||||
|
||||
return Download::DownloadUrl(url);
|
||||
}
|
||||
|
||||
|
||||
void DownloadProgram::Close()
|
||||
{
|
||||
file.close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
we check whether the download url is correct
|
||||
this is in the case of someone hacked the server with *.ini file
|
||||
*/
|
||||
bool IsServerCorrect(const std::string & url)
|
||||
{
|
||||
if( IsSubStringNoCase("http://downloads.sourceforge.net/", url.c_str()) ||
|
||||
IsSubStringNoCase("ftp://ttmath.org/", url.c_str()) )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
this method is called from the other thread too
|
||||
make sure you don't write directly to any global variables (from Update namespace etc)
|
||||
*/
|
||||
bool CheckUpdateFromIni(HWND hwnd, std::string & url_, std::string & remote_file_name_,
|
||||
int & major_, int & minor_, int & revision_, int & prerelease_,
|
||||
bool * continue_download_)
|
||||
{
|
||||
DownloadIni down_ini;
|
||||
|
||||
if( hwnd )
|
||||
down_ini.AttachProgress(GetDlgItem(hwnd, IDC_PROGRESS));
|
||||
|
||||
if( down_ini.DownloadUrl("http://update.ttmath.org/ttcalc_update.ini", continue_download_) )
|
||||
{
|
||||
IniParser iparser;
|
||||
std::string ini_value[4];
|
||||
|
||||
iparser.SectionCaseSensitive(false);
|
||||
|
||||
#ifndef TTCALC_PORTABLE
|
||||
iparser.Associate("normal|url", &url_ );
|
||||
iparser.Associate("normal|filename", &remote_file_name_ );
|
||||
iparser.Associate("normal|version.major", &ini_value[0] );
|
||||
iparser.Associate("normal|version.minor", &ini_value[1] );
|
||||
iparser.Associate("normal|version.revision", &ini_value[2] );
|
||||
iparser.Associate("normal|version.prerelease", &ini_value[3] );
|
||||
|
||||
#else
|
||||
iparser.Associate("portable|url", &url_ );
|
||||
iparser.Associate("portable|filename", &remote_file_name_ );
|
||||
iparser.Associate("portable|version.major", &ini_value[0] );
|
||||
iparser.Associate("portable|version.minor", &ini_value[1] );
|
||||
iparser.Associate("portable|version.revision", &ini_value[2] );
|
||||
iparser.Associate("portable|version.prerelease",&ini_value[3] );
|
||||
#endif
|
||||
|
||||
IniParser::Error err = iparser.ReadFromFile( down_ini.GetFileName() );
|
||||
|
||||
if( err == IniParser::err_ok && IsServerCorrect(url_) )
|
||||
{
|
||||
major_ = atoi(ini_value[0].c_str());
|
||||
minor_ = atoi(ini_value[1].c_str());
|
||||
revision_ = atoi(ini_value[2].c_str());
|
||||
prerelease_ = atoi(ini_value[3].c_str());
|
||||
|
||||
if( major_ > TTCALC_MAJOR_VER )
|
||||
return true;
|
||||
else
|
||||
if( major_ == TTCALC_MAJOR_VER && minor_ > TTCALC_MINOR_VER )
|
||||
return true;
|
||||
else
|
||||
if( major_ == TTCALC_MAJOR_VER && minor_ == TTCALC_MINOR_VER && revision_ > TTCALC_REVISION_VER )
|
||||
return true;
|
||||
else
|
||||
if( major_ == TTCALC_MAJOR_VER && minor_ == TTCALC_MINOR_VER && revision_ == TTCALC_REVISION_VER &&
|
||||
prerelease_ < TTCALC_PRERELEASE_VER )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
namespace Update
|
||||
{
|
||||
|
||||
|
||||
|
||||
void CheckUpdate(HWND hwnd)
|
||||
{
|
||||
char buffer[200];
|
||||
|
||||
level = -1; // nothing to do when Next is pressed
|
||||
continue_down = true;
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_NEXT), false);
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_UPDATE_INFO1), false);
|
||||
ShowWindow(GetDlgItem(hwnd, IDC_PROGRESS), SW_SHOW);
|
||||
CheckMessages();
|
||||
|
||||
if( CheckUpdateFromIni(hwnd, url, remote_file_name, major, minor, revision, prerelease, &continue_down) )
|
||||
{
|
||||
level = 1;
|
||||
sprintf(buffer, pl->GuiMessage(Languages::update_is_new_version), major, minor, revision);
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO1, buffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
level = 100;
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO1, pl->GuiMessage(Languages::update_no_new_version1));
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO2, pl->GuiMessage(Languages::update_no_new_version2));
|
||||
SetDlgItemText(hwnd, IDC_BUTTON_NEXT, pl->GuiMessage(Languages::update_button_finish));
|
||||
ShowWindow(GetDlgItem(hwnd, IDC_PROGRESS), SW_HIDE);
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_CANCEL), false);
|
||||
}
|
||||
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_NEXT), true);
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_UPDATE_INFO1), true);
|
||||
ShowWindow(GetDlgItem(hwnd, IDC_PROGRESS), SW_HIDE);
|
||||
SetFocus(GetDlgItem(hwnd, IDC_BUTTON_NEXT));
|
||||
}
|
||||
|
||||
|
||||
bool SaveDialog(HWND hwnd)
|
||||
{
|
||||
OPENFILENAME o;
|
||||
char buf[MAX_PATH], desktop[MAX_PATH];
|
||||
|
||||
if( !remote_file_name.empty() )
|
||||
sprintf(buf, remote_file_name.c_str());
|
||||
else
|
||||
{
|
||||
#ifndef TTCALC_PORTABLE
|
||||
sprintf(buf, "ttcalc-%d.%d.%d-setup.exe", major, minor, revision);
|
||||
#else
|
||||
sprintf(buf, "ttcalc-portable-%d.%d.%d-bin.tar.gz", major, minor, revision);
|
||||
#endif
|
||||
}
|
||||
|
||||
if( !SHGetSpecialFolderPath(hwnd, desktop, CSIDL_DESKTOPDIRECTORY, 0) )
|
||||
desktop[0] = 0;
|
||||
|
||||
o.lStructSize = sizeof(o);
|
||||
o.hwndOwner = hwnd;
|
||||
o.hInstance = GetPrgRes()->GetInstance();
|
||||
o.lpstrFilter = "*.*\0*.*\0";
|
||||
o.lpstrCustomFilter = 0;
|
||||
o.nMaxCustFilter = 0;
|
||||
o.nFilterIndex = 1;
|
||||
o.lpstrFile = buf;
|
||||
o.nMaxFile = MAX_PATH;
|
||||
o.lpstrFileTitle = 0;
|
||||
o.nMaxFileTitle = 0;
|
||||
o.lpstrInitialDir = (desktop[0]) ? desktop : 0;
|
||||
o.lpstrTitle = 0;
|
||||
o.Flags = OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST;
|
||||
o.nFileOffset = 0;
|
||||
o.nFileExtension = 0;
|
||||
o.lpstrDefExt = 0;
|
||||
o.lCustData = 0;
|
||||
o.lpfnHook = 0;
|
||||
o.lpTemplateName = 0;
|
||||
|
||||
|
||||
if( GetSaveFileName(&o) )
|
||||
{
|
||||
local_file_name = buf;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool DownloadUpdate(HWND hwnd)
|
||||
{
|
||||
DownloadProgram down;
|
||||
|
||||
level = -1; // nothing to do when Next is pressed
|
||||
continue_down = true;
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_NEXT), false);
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
|
||||
if( SaveDialog(hwnd) )
|
||||
{
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO1, pl->GuiMessage(Languages::update_download_from));
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO2, url.c_str());
|
||||
ShowWindow(GetDlgItem(hwnd, IDC_PROGRESS), SW_SHOW);
|
||||
|
||||
down.AttachProgress(GetDlgItem(hwnd, IDC_PROGRESS));
|
||||
CheckMessages();
|
||||
|
||||
if( down.DownloadUrl(url.c_str(), &continue_down) )
|
||||
{
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO1, pl->GuiMessage(Languages::update_downloaded_info1));
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO2, pl->GuiMessage(Languages::update_downloaded_info2));
|
||||
|
||||
#ifndef TTCALC_PORTABLE
|
||||
level = 2;
|
||||
#else
|
||||
level = 100;
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_CANCEL), false);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
level = 100;
|
||||
DeleteFile(local_file_name.c_str());
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO1, pl->GuiMessage(Languages::update_download_error));
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO2, "");
|
||||
}
|
||||
|
||||
ShowWindow(GetDlgItem(hwnd, IDC_PROGRESS), SW_HIDE);
|
||||
SetDlgItemText(hwnd, IDC_BUTTON_NEXT, pl->GuiMessage(Languages::update_button_finish));
|
||||
}
|
||||
else
|
||||
{
|
||||
level = 100;
|
||||
EndDialog(hwnd, 0);
|
||||
}
|
||||
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_NEXT), true);
|
||||
SetFocus(GetDlgItem(hwnd, IDC_BUTTON_NEXT));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BOOL UpdateInit(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
|
||||
if( level == 0 )
|
||||
{
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO1, pl->GuiMessage(Languages::update_check_for_info));
|
||||
}
|
||||
else
|
||||
if( level == 1 )
|
||||
{
|
||||
char buffer[200];
|
||||
|
||||
sprintf(buffer, pl->GuiMessage(Languages::update_is_new_version), major, minor, revision);
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO1, buffer);
|
||||
}
|
||||
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO2, "");
|
||||
SetDlgItemText(hwnd, IDC_BUTTON_NEXT, pl->GuiMessage(Languages::update_button_next));
|
||||
SetDlgItemText(hwnd, IDC_BUTTON_CANCEL, pl->GuiMessage(Languages::update_button_cancel));
|
||||
SetWindowText(hwnd, pl->GuiMessage(Languages::update_title));
|
||||
SetDlgItemText(hwnd, IDC_CHECK_UPDATE_STURTUP, pl->GuiMessage(Languages::update_check_at_startup));
|
||||
|
||||
if( GetPrgRes()->GetCheckUpdateStartup() )
|
||||
CheckDlgButton(hwnd, IDC_CHECK_UPDATE_STURTUP, BST_CHECKED);
|
||||
|
||||
ShowWindow(GetDlgItem(hwnd, IDC_PROGRESS), SW_HIDE);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
BOOL UpdateCommand(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if( LOWORD(wParam)==IDCANCEL || LOWORD(wParam)==IDC_BUTTON_CANCEL )
|
||||
{
|
||||
continue_down = false;
|
||||
EndDialog(hwnd, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( LOWORD(wParam) == IDC_CHECK_UPDATE_STURTUP )
|
||||
{
|
||||
GetPrgRes()->SetCheckUpdateStartup( IsDlgButtonChecked(hwnd, IDC_CHECK_UPDATE_STURTUP)==BST_CHECKED );
|
||||
}
|
||||
else
|
||||
if( LOWORD(wParam) == IDC_BUTTON_NEXT )
|
||||
{
|
||||
switch(level)
|
||||
{
|
||||
case 0:
|
||||
CheckUpdate(hwnd);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
DownloadUpdate(hwnd);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
ShellExecute(0, "open", local_file_name.c_str(), "", "", SW_SHOWNORMAL);
|
||||
EndDialog(hwnd, 0);
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
case 100:
|
||||
EndDialog(hwnd, 0);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void CreateUpdateMessagesTable(Messages<BOOL> & messages)
|
||||
{
|
||||
messages.Associate(WM_INITDIALOG, UpdateInit);
|
||||
messages.Associate(WM_COMMAND, UpdateCommand);
|
||||
}
|
||||
|
||||
|
||||
BOOL CALLBACK UpdateProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static Messages<BOOL> messages;
|
||||
|
||||
if( messages.Empty() )
|
||||
// initiation
|
||||
CreateUpdateMessagesTable(messages);
|
||||
|
||||
return messages.Call(msg, hwnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
unsigned __stdcall UpdateBackgroundProc(void *)
|
||||
{
|
||||
using namespace Background;
|
||||
|
||||
try
|
||||
{
|
||||
if( CheckUpdateFromIni(0, url_, remote_file_name_, major_, minor_, revision_, prerelease_, 0) )
|
||||
{
|
||||
HWND main = GetPrgRes()->GetMainWindow();
|
||||
PostMessage(main, WM_UPDATE_EXISTS, 0, 0);
|
||||
}
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
}
|
||||
|
||||
_endthreadex(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
} // namespace
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void ShowUpdateDialog(HWND hwnd)
|
||||
{
|
||||
using namespace Update;
|
||||
|
||||
level = 0;
|
||||
local_file_name.clear();
|
||||
remote_file_name.clear();
|
||||
url.clear();
|
||||
|
||||
DialogBox(GetPrgRes()->GetInstance(), MAKEINTRESOURCE(IDD_UPDATE_DIALOG), hwnd, UpdateProc);
|
||||
}
|
||||
|
||||
|
||||
void ShowUpdateDialogAfterCheck(HWND hwnd)
|
||||
{
|
||||
using namespace Update;
|
||||
|
||||
level = 1;
|
||||
local_file_name.clear();
|
||||
|
||||
// make sure that there is a memory barrier before reading next objects (those from Background::)
|
||||
// objects from Background:: are set by an another thread at the beginning
|
||||
// when we are here then the thread is not writing (it exited)
|
||||
remote_file_name = Background::remote_file_name_;
|
||||
url = Background::url_;
|
||||
major = Background::major_;
|
||||
minor = Background::minor_;
|
||||
revision = Background::revision_;
|
||||
|
||||
DialogBox(GetPrgRes()->GetInstance(), MAKEINTRESOURCE(IDD_UPDATE_DIALOG), hwnd, UpdateProc);
|
||||
}
|
||||
|
||||
|
||||
void CheckUpdateInBackground()
|
||||
{
|
||||
time_t last = GetPrgRes()->GetLastUpdate();
|
||||
time_t now = time(0);
|
||||
|
||||
// testing only once a three days (259200 = 60*60*24 * 3)
|
||||
if( GetPrgRes()->GetCheckUpdateStartup() && last+259200 < now )
|
||||
{
|
||||
// this setting can be added also when a user selects manually the test for an update
|
||||
GetPrgRes()->SetLastUpdate(now);
|
||||
|
||||
unsigned int thread_id;
|
||||
_beginthreadex(0, 0, Update::UpdateBackgroundProc, 0, 0, &thread_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
97
src/update.h
97
src/update.h
|
@ -1,97 +0,0 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name Tomasz Sowa nor the names of contributors to this
|
||||
* project may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef headerfileupdate
|
||||
#define headerfileupdate
|
||||
|
||||
#include <windows.h>
|
||||
#include <fstream>
|
||||
#include <cstdio>
|
||||
#include "download.h"
|
||||
|
||||
|
||||
void ShowUpdateDialog(HWND hwnd);
|
||||
void ShowUpdateDialogAfterCheck(HWND hwnd);
|
||||
void CheckUpdateInBackground();
|
||||
|
||||
|
||||
|
||||
class DownloadIni : public Download
|
||||
{
|
||||
public:
|
||||
DownloadIni();
|
||||
~DownloadIni();
|
||||
void DeleteTmpFile();
|
||||
const char * GetFileName();
|
||||
bool DownloadUrl(const char * url, bool * continue_download = 0);
|
||||
|
||||
private:
|
||||
|
||||
FILE * CreateTmpFile();
|
||||
virtual void GetLen(HINTERNET conn);
|
||||
virtual bool Init();
|
||||
virtual bool Read(char * buffer, size_t size);
|
||||
virtual void Close();
|
||||
|
||||
char * file_name;
|
||||
FILE * file;
|
||||
bool * continue_download;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class DownloadProgram : public Download
|
||||
{
|
||||
public:
|
||||
DownloadProgram();
|
||||
bool DownloadUrl(const char * url, bool * continue_download = 0);
|
||||
|
||||
private:
|
||||
virtual void GetLen(HINTERNET conn);
|
||||
virtual bool Init();
|
||||
virtual bool Read(char * buffer, size_t size);
|
||||
virtual void Close();
|
||||
|
||||
std::ofstream file;
|
||||
bool * continue_download;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -97,14 +97,9 @@ char * pchar;
|
|||
SetDlgItemText(hWnd,IDC_EDIT_VARIABLE_VALUE, value.c_str());
|
||||
|
||||
if( adding)
|
||||
{
|
||||
SetFocus(GetDlgItem(hWnd,IDC_EDIT_VARIABLE_NAME));
|
||||
}
|
||||
else
|
||||
{
|
||||
SetFocus(GetDlgItem(hWnd,IDC_EDIT_VARIABLE_VALUE));
|
||||
SendDlgItemMessage(hWnd, IDC_EDIT_VARIABLE_VALUE, EM_SETSEL, value.size(), value.size());
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
|
@ -268,8 +263,6 @@ BOOL WmTabCommand_AddVariable(HWND, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
{
|
||||
int id = AddNewItemToVariableList(list, name, value);
|
||||
SelectOnlyOneItem(list,id);
|
||||
GetPrgRes()->ReadVariablesFunctionsFromFile();
|
||||
GetPrgRes()->SaveToFile();
|
||||
}
|
||||
}
|
||||
while( code != ttmath::err_ok );
|
||||
|
@ -331,11 +324,7 @@ adding = false;
|
|||
if( code != ttmath::err_ok )
|
||||
ShowError(list, code);
|
||||
else
|
||||
{
|
||||
ChangeItemInVariableList(list, id, old_name, name, value);
|
||||
GetPrgRes()->ReadVariablesFunctionsFromFile();
|
||||
GetPrgRes()->SaveToFile();
|
||||
}
|
||||
}
|
||||
while( code != ttmath::err_ok );
|
||||
|
||||
|
@ -368,7 +357,6 @@ int items = ListView_GetSelectedCount(list);
|
|||
char * buffer = new char[buffer_size];
|
||||
bool all_deleted = true;
|
||||
|
||||
GetPrgRes()->ReadVariablesFunctionsFromFile();
|
||||
GetPrgRes()->GetThreadController()->StopCalculating();
|
||||
|
||||
for( id = ListView_GetItemCount(list)-1 ; id!=-1 ; --id )
|
||||
|
@ -387,7 +375,6 @@ int items = ListView_GetSelectedCount(list);
|
|||
|
||||
|
||||
GetPrgRes()->GetThreadController()->StartCalculating();
|
||||
GetPrgRes()->SaveToFile();
|
||||
|
||||
delete [] buffer;
|
||||
|
||||
|
|
226
src/winmain.cpp
226
src/winmain.cpp
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006-2011, Tomasz Sowa
|
||||
* Copyright (c) 2006-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -37,7 +37,6 @@
|
|||
|
||||
#include "compileconfig.h"
|
||||
#include "winmain.h"
|
||||
#include "update.h"
|
||||
|
||||
/*!
|
||||
\file mainwin.cpp
|
||||
|
@ -51,17 +50,8 @@
|
|||
/*!
|
||||
the application starts here
|
||||
*/
|
||||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR par, int)
|
||||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
|
||||
{
|
||||
if( strcmp(par, "createconfig") == 0 )
|
||||
{
|
||||
GetPrgRes()->SetConfigName();
|
||||
GetPrgRes()->SaveToFile();
|
||||
return 0;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
GetPrgRes()->SetInstance(hInstance);
|
||||
|
||||
// we're using GetLanguages() simultaneously in two threads, this is to be sure
|
||||
|
@ -69,7 +59,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR par, int)
|
|||
GetPrgRes()->GetLanguages()->InitAll();
|
||||
GetPrgRes()->GetLanguages()->SetCurrentLanguage(Languages::en);
|
||||
//GetPrgRes()->GetConvert()->Init();
|
||||
GetPrgRes()->SetNameOfFiles();
|
||||
GetPrgRes()->SetNameOfConfigurationFile();
|
||||
GetPrgRes()->ReadFromFile();
|
||||
|
||||
INITCOMMONCONTROLSEX common_ctrl;
|
||||
|
@ -87,46 +77,21 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR par, int)
|
|||
if( (thread_handle = _beginthreadex(0,0,CalculationsProcedure, 0, 0, &thread_id)) == 0 )
|
||||
return ShowError( Languages::cant_create_thread );
|
||||
|
||||
bool maximized_from_file = GetPrgRes()->GetMaximized();
|
||||
CreateDialog( hInstance, MAKEINTRESOURCE(IDD_MAIN_DIALOG), 0, MainWindowProc);
|
||||
|
||||
if( !GetPrgRes()->GetMainWindow() )
|
||||
return ShowError( Languages::cant_create_main_window );
|
||||
|
||||
if( maximized_from_file )
|
||||
{
|
||||
GetPrgRes()->SetMaximized(true);
|
||||
ShowWindow(GetPrgRes()->GetMainWindow(), SW_SHOWMAXIMIZED);
|
||||
}
|
||||
else
|
||||
{
|
||||
GetPrgRes()->SetMaximized(false);
|
||||
ShowWindow(GetPrgRes()->GetMainWindow(), SW_SHOWNORMAL);
|
||||
}
|
||||
|
||||
if( !CreatePadWindow() )
|
||||
return ShowError( Languages::cant_create_pad );
|
||||
|
||||
// checking for an update (in an another thread)
|
||||
CheckUpdateInBackground();
|
||||
|
||||
// the main loop of messages
|
||||
// there's the main loop of messages here
|
||||
MainMessagesLoop();
|
||||
|
||||
// there can be another variables/functions saved by other instantion of TTCalc
|
||||
// we're reading them now
|
||||
GetPrgRes()->ReadVariablesFunctionsFromFile();
|
||||
|
||||
GetPrgRes()->SaveToFile();
|
||||
|
||||
DestroyPadWindow();
|
||||
CloseHandle( (HANDLE)thread_handle );
|
||||
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
ShowError( Languages::unknown_error );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -145,111 +110,6 @@ return static_cast<int>( error_code );
|
|||
}
|
||||
|
||||
|
||||
bool AcceleratorForMainWindow(MSG & msg)
|
||||
{
|
||||
bool sent = true;
|
||||
|
||||
switch( msg.wParam )
|
||||
{
|
||||
case 'C':
|
||||
sent = MainWindowFunctions::CopySpecial();
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
sent = MainWindowFunctions::CopyResult();
|
||||
break;
|
||||
|
||||
case 'V':
|
||||
sent = MainWindowFunctions::PasteFormula();
|
||||
break;
|
||||
|
||||
case 'B':
|
||||
sent = SendMessage(GetPrgRes()->GetMainWindow(), WM_COMMAND, IDM_EDIT_COPY_BOTH, 0);
|
||||
break;
|
||||
|
||||
case 'W':
|
||||
sent = SendMessage(GetPrgRes()->GetMainWindow(), WM_COMMAND, IDM_EDIT_SWAP, 0);
|
||||
break;
|
||||
|
||||
case '0':
|
||||
SendMessage(GetPrgRes()->GetMainWindow(), WM_COMMAND, IDC_BUTTON_BRACKETS_ALL, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
sent = false;
|
||||
}
|
||||
|
||||
return sent;
|
||||
}
|
||||
|
||||
|
||||
bool AcceleratorForPadEdit(MSG & msg)
|
||||
{
|
||||
if( msg.wParam == 'A' )
|
||||
{
|
||||
SendMessage(GetPrgRes()->GetPadWindow(), WM_COMMAND, MENUPAD_EDIT_SELECTALL, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool CheckAcceleratorKeys(MSG & msg)
|
||||
{
|
||||
if( msg.message != WM_KEYDOWN )
|
||||
return false;
|
||||
|
||||
if( (GetKeyState(VK_CONTROL) & 0xff00) == 0 )
|
||||
return false;
|
||||
|
||||
if( msg.hwnd == GetPrgRes()->GetPadEdit() )
|
||||
return AcceleratorForPadEdit(msg);
|
||||
|
||||
return AcceleratorForMainWindow(msg);
|
||||
}
|
||||
|
||||
|
||||
void SendMessage(MSG & msg)
|
||||
{
|
||||
bool sent = CheckAcceleratorKeys(msg);
|
||||
|
||||
// we give our own special function for navigating from the keyboard
|
||||
// if our function returns false then we use a standard navigation
|
||||
// from the system
|
||||
if( !sent && msg.message == WM_KEYDOWN &&
|
||||
( msg.wParam == VK_TAB ||
|
||||
msg.wParam == VK_DOWN || msg.wParam == VK_UP ||
|
||||
msg.wParam == VK_LEFT || msg.wParam == VK_DOWN ) )
|
||||
|
||||
{
|
||||
if( MainWindowFunctions::SetNextFocus(msg.wParam) )
|
||||
sent = true;
|
||||
}
|
||||
|
||||
|
||||
// firt we try to send our message to dialogs
|
||||
// (the dialogs on the tab control)
|
||||
if( !sent )
|
||||
{
|
||||
for(unsigned int i=0 ; i<GetPrgRes()->HowManyTabWindows() && !sent ; ++i)
|
||||
{
|
||||
if( IsDialogMessage(GetPrgRes()->GetTabWindow(i), &msg) )
|
||||
sent = true;
|
||||
}
|
||||
}
|
||||
|
||||
// if it's not a message to any of our dialogs we send it
|
||||
// to the main window (it's a dialog as well)
|
||||
if( !sent )
|
||||
{
|
||||
if( !IsDialogMessage(GetPrgRes()->GetMainWindow(), &msg) )
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -260,30 +120,72 @@ void MainMessagesLoop()
|
|||
MSG msg;
|
||||
|
||||
while( GetMessage(&msg,0,0,0) )
|
||||
SendMessage(msg);
|
||||
{
|
||||
bool sent = false;
|
||||
|
||||
// if there's CTRL+C or CTRL+V pressed we're trying to copy
|
||||
// a result from the output edit or trying to paste something from the clipboard
|
||||
if( msg.message==WM_KEYDOWN && (GetKeyState(VK_CONTROL) & 0xff00)!=0 )
|
||||
{
|
||||
if( msg.wParam == 'C' )
|
||||
{
|
||||
if( MainWindowFunctions::CopyResult() )
|
||||
sent = true;
|
||||
}
|
||||
else
|
||||
if( msg.wParam == 'V' )
|
||||
{
|
||||
if( MainWindowFunctions::Paste() )
|
||||
sent = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// we give our own special function for navigating from the keyboard
|
||||
// if our function returns false then we use a standard navigation
|
||||
// from the system
|
||||
if( !sent && msg.message == WM_KEYDOWN &&
|
||||
( msg.wParam == VK_TAB ||
|
||||
msg.wParam == VK_DOWN || msg.wParam == VK_UP ||
|
||||
msg.wParam == VK_LEFT || msg.wParam == VK_DOWN ) )
|
||||
|
||||
{
|
||||
if( MainWindowFunctions::SetNextFocus(msg.wParam) )
|
||||
sent = true;
|
||||
}
|
||||
|
||||
|
||||
// firt we try to send our message to dialogs
|
||||
// (the dialogs on the tab control)
|
||||
if( !sent )
|
||||
{
|
||||
for(unsigned int i=0 ; i<GetPrgRes()->HowManyTabWindows() && !sent ; ++i)
|
||||
{
|
||||
if( IsDialogMessage(GetPrgRes()->GetTabWindow(i), &msg) )
|
||||
sent = true;
|
||||
}
|
||||
}
|
||||
|
||||
// if it's not a message to any of our dialogs we send it
|
||||
// to the main window (it's a dialog as well)
|
||||
if( !sent )
|
||||
{
|
||||
if( !IsDialogMessage(GetPrgRes()->GetMainWindow(), &msg) )
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*!
|
||||
if there are some messages then they will be sent
|
||||
*/
|
||||
void CheckMessages()
|
||||
{
|
||||
MSG msg;
|
||||
|
||||
while( PeekMessage(&msg, 0, 0, 0, PM_REMOVE) )
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*!
|
||||
the window-procedure for the main window
|
||||
*/
|
||||
BOOL CALLBACK MainWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static Messages<BOOL> messages;
|
||||
static Messages messages;
|
||||
|
||||
if( messages.Empty() )
|
||||
// initiation
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -47,11 +47,11 @@
|
|||
#include "resource.h"
|
||||
#include "messages.h"
|
||||
#include "tabs.h"
|
||||
#include "pad.h"
|
||||
|
||||
#include <windows.h>
|
||||
#include <commctrl.h>
|
||||
#include <process.h>
|
||||
|
||||
#include <map>
|
||||
|
||||
|
||||
|
@ -59,16 +59,14 @@ BOOL CALLBACK MainWindowProc(HWND hWnd, UINT messge, WPARAM wParam, LPARAM lPara
|
|||
unsigned __stdcall CalculationsProcedure(void *);
|
||||
int ShowError( Languages::GuiMsg error_code );
|
||||
void MainMessagesLoop();
|
||||
void CheckMessages();
|
||||
|
||||
|
||||
namespace MainWindowFunctions
|
||||
{
|
||||
bool SetNextFocus(WPARAM wParam);
|
||||
bool CopyResult();
|
||||
bool CopySpecial();
|
||||
bool PasteFormula();
|
||||
BOOL WmCommand_EditCopyBoth(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
void CreateMainMessagesTable(Messages<BOOL> & messages);
|
||||
bool Paste();
|
||||
void CreateMainMessagesTable(Messages & messages);
|
||||
BOOL CALLBACK AboutProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
# this file is downloaded from a webserver during checking for an update
|
||||
|
||||
[normal]
|
||||
url = http://downloads.sourceforge.net/project/ttcalc/ttcalc/ttcalc-0.9.3/ttcalc-0.9.3-setup.exe
|
||||
filename = ttcalc-0.9.3-setup.exe
|
||||
version.major = 0
|
||||
version.minor = 9
|
||||
version.revision = 3
|
||||
version.prerelease = 0
|
||||
|
||||
[portable]
|
||||
url = http://downloads.sourceforge.net/project/ttcalc/ttcalc/ttcalc-0.9.3/ttcalc-portable-0.9.3-bin.zip
|
||||
filename = ttcalc-portable-0.9.3-bin.zip
|
||||
version.major = 0
|
||||
version.minor = 9
|
||||
version.revision = 3
|
||||
version.prerelease = 0
|
||||
|
Loading…
Reference in New Issue