Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | merge with trunk |
---|---|
Timelines: | family | ancestors | descendants | both | wtf-8-experiment |
Files: | files | file ages | folders |
SHA1: |
272fbdd6d99d7abb3d5d5be85b54756a |
User & Date: | chw 2019-10-11 19:20:06.530 |
Context
2019-10-12
| ||
06:24 | merge with trunk check-in: eed284ebf4 user: chw tags: wtf-8-experiment | |
2019-10-11
| ||
19:20 | merge with trunk check-in: 272fbdd6d9 user: chw tags: wtf-8-experiment | |
19:18 | more tk upstream changes check-in: c9c48cbf65 user: chw tags: trunk | |
09:41 | merge with trunk check-in: ac013c9183 user: chw tags: wtf-8-experiment | |
Changes
Changes to assets/INVENTORY.
1 2 3 4 5 6 7 | {opt assets/ble*} {opt assets/blt* {libs/$arch/libblt.so jni/blt}} {req assets/borg* {libs/$arch/libmain.so jni/src src/tk/tcl/wish}} {opt assets/bwidget*} {opt assets/can2svg*} {opt assets/Canvas3d* {libs/$arch/libCanvas3d.so jni/3dcanvas}} {opt jni/sdl2tk/library/demos} | > | 1 2 3 4 5 6 7 8 | {opt assets/awthemes*} {opt assets/ble*} {opt assets/blt* {libs/$arch/libblt.so jni/blt}} {req assets/borg* {libs/$arch/libmain.so jni/src src/tk/tcl/wish}} {opt assets/bwidget*} {opt assets/can2svg*} {opt assets/Canvas3d* {libs/$arch/libCanvas3d.so jni/3dcanvas}} {opt jni/sdl2tk/library/demos} |
︙ | ︙ |
Changes to assets/awthemes3/README.txt.
1 |
| | | | > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Only the 'awthemes.tcl', 'colorutils.tcl', 'themeutils.tcl' and 'pkgIndex.tcl' files are necessary. The other files are infrastructure files and only needed for development. awthemes 3.1 - Added themeutils.tcl. ::themeutils::setThemeColors awdark color-name color ... allows the colors to be set. The graphical colors will be changed when tksvg is in use. See themeutils.tcl for a list of color names. awthemes 3.0 - Breaking change: The package name has been renamed so that 'package require awdark' works. - Support for tksvg has been added. New graphics have been added to support tksvg, and the graphics |
︙ | ︙ |
Changes to assets/awthemes3/awthemes.tcl.
︙ | ︙ | |||
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | # Sets the listbox widget colors. # # ::ttk::theme::awdark::setBackground color # requires the colorutils package # # ::ttk::theme::awdark::setHighlight color # requires the colorutils package # # Mac OS X notes for prior to 8.6.9: # To style the scrollbars, use: # ttk::scrollbar .sb -style Vertical.TScrollbar # or ttk::scrollbar .sb -style Horizontal.TScrollbar # This will turn off the aqua styling and use the theme styling. # Also note that the styling for the scrollbar cannot be configured # afterwards, it must be configured when the scrollbar is created. # # 3.0 # - tksvg support # 2.6 # - Fix mac colors # 2.5 # - Added missing TFrame style setup. # 2.4 | > > > > > > > > > > > > > > > | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | # Sets the listbox widget colors. # # ::ttk::theme::awdark::setBackground color # requires the colorutils package # # ::ttk::theme::awdark::setHighlight color # requires the colorutils package # This does not work with the scalable graphics. # # ::themeutils::setThemeColors awdark colorname color ... # Allows modification of any of the colors used by awdark and awlight. # The graphical colors will be changed to match. # e.g. # package require colorutils # package require themeutils # ::themeutils::setThemeColors awdark \ # highlight.selectbg #007000 highlight.selectdisabledbg #222222 # package require awdark # will change the selection and graphical colors to a green, and the # the disabled selection color to a dark grey. # # Mac OS X notes for prior to 8.6.9: # To style the scrollbars, use: # ttk::scrollbar .sb -style Vertical.TScrollbar # or ttk::scrollbar .sb -style Horizontal.TScrollbar # This will turn off the aqua styling and use the theme styling. # Also note that the styling for the scrollbar cannot be configured # afterwards, it must be configured when the scrollbar is created. # # 3.1 # - allow user configuration of colors # 3.0 # - tksvg support # 2.6 # - Fix mac colors # 2.5 # - Added missing TFrame style setup. # 2.4 |
︙ | ︙ | |||
109 110 111 112 113 114 115 116 117 118 119 120 121 122 | try { set ap [file normalize [file dirname [info script]]] if { $ap ni $::auto_path } { lappend ::auto_path $ap } unset ap package require colorutils } on error {err res} { } proc awinit { } { global awthemename foreach awthemename {awdark awlight} { | > > | | | 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | try { set ap [file normalize [file dirname [info script]]] if { $ap ni $::auto_path } { lappend ::auto_path $ap } unset ap package require colorutils package require themeutils } on error {err res} { puts stderr "ERROR: colorutlis and themeutils packages are required" } proc awinit { } { global awthemename foreach awthemename {awdark awlight} { package provide $awthemename 3.1 package provide ttk::theme::$awthemename 3.1 namespace eval ::ttk::theme::$awthemename { variable colors variable images variable imgdata variable vars |
︙ | ︙ | |||
150 151 152 153 154 155 156 | set vars(have.tksvg) false if { ! [catch {package present tksvg}] } { set vars(have.tksvg) true } _setThemeBaseColors | > > | | | | > > > | > > | | > | > > | > > > | > | | | | | | | | | | | | | | < < < < < < < < < > > > > > > > > > > > > > > > > > > > > | | | | | | | | | > | 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 | set vars(have.tksvg) false if { ! [catch {package present tksvg}] } { set vars(have.tksvg) true } _setThemeBaseColors # set up the curr.* named colors foreach {k} [array names colors] { if { [regexp {^user\.} $k] } { continue } set colors(curr.$k) $colors($k) } # override colors with any user.* colors # these are set by the ::themeutils package # process the base colors first, then the derived colors foreach {k} $::themeutils::vars(names.colors.base) { if { [info exists colors(user.$k)] } { set colors(curr.$k) $colors(user.$k) } } # sets both the base colors and the curr.* colors _setDerivedColors # now override any derived colors with user-specified colors foreach {k} $::themeutils::vars(names.colors.derived) { if { [info exists colors(user.$k)] } { set colors(curr.$k) $colors(user.$k) } } _setImageData _createTheme _setStyledColors } proc _setThemeBaseColors { } { variable vars variable colors if { $vars(theme.name) eq "awdark" } { array set colors { base.disabledfg #919282 base.disabledbg #2d3234 base.disabledborder #202425 base.frame #33393b base.dark #252a2c base.darker #1b1f20 base.darkest #000000 base.bpress #424a4d base.lighter #525c5f base.lightest #ffffff highlight.selectbg #215d9c highlight.selectdisabledbg #224162 highlight.darkhighlight #1a497c highlight.selectfg #ffffff } } if { $vars(theme.name) eq "awlight" } { array set colors { base.frame #e8e8e7 base.disabledfg #8e8e8f base.disabledbg #cacaca base.disabledborder #c0c0bd base.dark #cacaca base.darker #8b8391 base.darkest #000000 base.bpress #e8e8e7 base.lighter #f0f0f0 base.lightest #ffffff highlight.selectbg #1a497c highlight.selectdisabledbg #f0f0f0 highlight.darkhighlight #1a497c highlight.selectfg #ffffff } } } proc _setDerivedColors { } { variable vars variable colors foreach {prefix} {{} curr.} { if { $vars(theme.name) eq "awdark" } { set colors(${prefix}base.arrow) $colors(base.lightest) set colors(${prefix}base.arrow.disabled) $colors(base.lighter) set colors(${prefix}base.border) $colors(base.darkest) set colors(${prefix}base.border.light) $colors(base.darkest) set colors(${prefix}text.text) $colors(base.lightest) set colors(${prefix}base.tabborder) $colors(base.darkest) set colors(${prefix}base.tabinactive) $colors(base.frame) set colors(${prefix}base.tabhighlight) #8b9ca1 set colors(${prefix}base.entrybg) $colors(base.darker) } if { $vars(theme.name) eq "awlight" } { set colors(${prefix}base.arrow) $colors(base.darkest) set colors(${prefix}base.arrow.disabled) $colors(base.darker) set colors(${prefix}base.border) $colors(base.dark) set colors(${prefix}base.border.light) $colors(base.dark) set colors(${prefix}text.text) $colors(base.darkest) set colors(${prefix}base.tabborder) $colors(base.frame) set colors(${prefix}base.tabinactive) $colors(base.darker) set colors(${prefix}base.tabhighlight) $colors(base.darkest) set colors(${prefix}base.entrybg) $colors(base.lightest) } } } proc _setImageData { } { variable vars variable imgdata variable imgtype |
︙ | ︙ | |||
3704 3705 3706 3707 3708 3709 3710 | style="opacity:1;fill:#215d9b;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-3" cx="12.721766" cy="284.22617" rx="0.69321311" ry="0.69321305" /> <ellipse | | | | | | | | | | | | | | | | | | | | | | | | | 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 | style="opacity:1;fill:#215d9b;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-3" cx="12.721766" cy="284.22617" rx="0.69321311" ry="0.69321305" /> <ellipse style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-6" cx="11.119109" cy="285.81818" rx="0.69321311" ry="0.69321305" /> <ellipse style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-7" cx="9.5164518" cy="287.41016" rx="0.69321311" ry="0.69321305" /> <ellipse style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-5" cx="7.913794" cy="289.00214" rx="0.69321311" ry="0.69321305" /> <ellipse style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-35" cx="6.3111362" cy="290.59412" rx="0.69321311" ry="0.69321305" /> <ellipse style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-62" cx="4.7084789" cy="292.18613" rx="0.69321311" ry="0.69321305" /> <ellipse style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-9" cx="3.1058214" cy="293.77811" rx="0.69321311" ry="0.69321305" /> <ellipse style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-1" cx="1.5031636" cy="295.37009" rx="0.69321311" ry="0.69321305" /> </g> <g id="g959" transform="translate(-0.53809974,-0.04111673)"> <ellipse inkscape:transform-center-y="-2.5681986" inkscape:transform-center-x="-1.8183937" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-3-7" cx="14.967299" cy="285.89139" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="-1.8042036" inkscape:transform-center-x="-1.05441" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-6-0" cx="13.364642" cy="287.48337" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="-1.0402233" inkscape:transform-center-x="-0.29042529" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-7-9" cx="11.761985" cy="289.07538" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="-0.27624296" inkscape:transform-center-x="0.47355939" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-5-3" cx="10.159327" cy="290.66736" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="0.48773736" inkscape:transform-center-x="1.2375436" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-35-6" cx="8.5566683" cy="292.25934" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="1.2517323" inkscape:transform-center-x="2.0015276" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-62-0" cx="6.954011" cy="293.85135" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="2.0157126" inkscape:transform-center-x="2.7655121" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-9-6" cx="5.3513532" cy="295.44333" rx="0.69321311" ry="0.69321305" /> </g> <g id="g1056" transform="translate(-0.28974602,-0.04111673)"> <ellipse inkscape:transform-center-y="-1.8042036" inkscape:transform-center-x="-1.05441" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-6-0-8" cx="14.689195" cy="289.13831" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="-1.0402233" inkscape:transform-center-x="-0.29042529" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-7-9-7" cx="13.086537" cy="290.73032" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="-0.27624296" inkscape:transform-center-x="0.47355939" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-5-3-9" cx="11.48388" cy="292.3223" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="0.48773736" inkscape:transform-center-x="1.2375436" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-35-6-2" cx="9.8812218" cy="293.91428" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="1.2517323" inkscape:transform-center-x="2.0015276" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-62-0-0" cx="8.2785645" cy="295.50629" rx="0.69321311" ry="0.69321305" /> </g> <g id="g1034" transform="translate(8.4854191,7.1543113)"> <ellipse inkscape:transform-center-y="-1.0402233" inkscape:transform-center-x="-0.29042529" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-7-9-7-7" cx="5.9463682" cy="285.23096" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="-0.27624296" inkscape:transform-center-x="0.47355939" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-5-3-9-5" cx="4.3437109" cy="286.82294" rx="0.69321311" ry="0.69321305" /> <ellipse inkscape:transform-center-y="0.48773736" inkscape:transform-center-x="1.2375436" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path841-79-35-6-2-9" cx="2.7410524" cy="288.41492" rx="0.69321311" ry="0.69321305" /> </g> <ellipse ry="0.69321305" rx="0.69321311" cy="295.49088" cx="14.451189" id="path841-79-6-0-8-2" style="opacity:1;fill:#215d9c;fill-opacity:1;stroke:#07090b;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" inkscape:transform-center-x="-1.05441" inkscape:transform-center-y="-1.8042036" /> </g> </g> </svg> } # slider-hd |
︙ | ︙ | |||
4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 | ry="0" transform="scale(-1)" /> </g> </svg> } #E == svgdata == } if { $vars(theme.name) eq "awdark" } { if { ! [info exists imgdata(cb-sa)] } { # cb-sa set imgdata(cb-sa) { iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAAOJgAADiYBou8l/AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABSdEVY | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 | ry="0" transform="scale(-1)" /> </g> </svg> } #E == svgdata == } if { $vars(theme.name) eq "awlight" } { # convert all the svg colors to awlight specific colors if { $vars(have.tksvg) } { foreach {n} [array names ::ttk::theme::awdark::imgdata] { set imgdata($n) $::ttk::theme::awdark::imgdata($n) if { [string match *arrow* $n] } { set oc $::ttk::theme::awdark::colors(highlight.selectbg) set nc $colors(curr.base.lighter) regsub -all $oc $imgdata($n) $nc imgdata($n) } foreach {oc nc} [list \ $::ttk::theme::awdark::colors(base.dark) \ $colors(base.dark) \ $::ttk::theme::awdark::colors(base.disabledfg) \ $colors(base.disabledfg) \ $::ttk::theme::awdark::colors(base.disabledbg) \ $colors(base.disabledbg) \ $::ttk::theme::awdark::colors(base.disabledborder) \ $colors(base.disabledborder) \ $::ttk::theme::awdark::colors(base.bpress) \ $colors(base.bpress) \ $::ttk::theme::awdark::colors(highlight.selectbg) \ $colors(highlight.selectbg) \ $::ttk::theme::awdark::colors(highlight.selectdisabledbg) \ $colors(highlight.selectdisabledbg) \ $::ttk::theme::awdark::colors(base.border) \ $colors(base.border) \ $::ttk::theme::awdark::colors(base.arrow) \ $colors(base.arrow) \ ] { regsub -all $oc $imgdata($n) $nc imgdata($n) } } } } # convert all the svg colors to the current colors if { $vars(have.tksvg) } { foreach {n} [array names imgdata] { if { [string match *arrow* $n] } { set oc $colors(highlight.selectbg) set nc $colors(curr.highlight.selectbg) if { $nc ne $oc } { regsub -all $oc $imgdata($n) $nc imgdata($n) } } foreach {oc nc} [list \ $colors(base.dark) \ $colors(curr.base.dark) \ $colors(base.disabledfg) \ $colors(curr.base.disabledfg) \ $colors(base.disabledbg) \ $colors(curr.base.disabledbg) \ $colors(base.disabledborder) \ $colors(curr.base.disabledborder) \ $colors(base.bpress) \ $colors(curr.base.bpress) \ $colors(highlight.selectbg) \ $colors(curr.highlight.selectbg) \ $colors(highlight.selectdisabledbg) \ $colors(curr.highlight.selectdisabledbg) \ $colors(base.border) \ $colors(curr.base.border) \ $colors(base.arrow) \ $colors(curr.base.arrow) \ ] { if { $nc ne $oc } { regsub -all $oc $imgdata($n) $nc imgdata($n) } } } } if { $vars(theme.name) eq "awdark" } { if { ! [info exists imgdata(cb-sa)] } { # cb-sa set imgdata(cb-sa) { iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAAOJgAADiYBou8l/AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABSdEVY |
︙ | ︙ | |||
4776 4777 4778 4779 4780 4781 4782 | QnjtvO9k08mVGKOIMfrvMylcVbHI0vhzOFyUh8u3zrm7wPK4DS8ZY55Yaz+LSCoimVj7Vax9Dmwf Hf4Dx8Kr4mNF2+sAAAAASUVORK5CYII= } } } if { $vars(theme.name) eq "awlight" } { | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 | QnjtvO9k08mVGKOIMfrvMylcVbHI0vhzOFyUh8u3zrm7wPK4DS8ZY55Yaz+LSCoimVj7Vax9Dmwf Hf4Dx8Kr4mNF2+sAAAAASUVORK5CYII= } } } if { $vars(theme.name) eq "awlight" } { if { ! [info exists imgdata(cb-sa)] } { # cb-sa set imgdata(cb-sa) { iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz AAAOJgAADiYBou8l/AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABSdEVY dENvcHlyaWdodABDQyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIGh0dHA6Ly9jcmVhdGl2ZWNvbW1v bnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC/DVGIFAAAB3klEQVQ4jYWSvW9SURiHn3O4VMtH1ARb |
︙ | ︙ | |||
5496 5497 5498 5499 5500 5501 5502 | } proc _createNotebookStyle { } { variable colors variable images variable vars | | | | | | 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 | } proc _createNotebookStyle { } { variable colors variable images variable vars set tag "$colors(curr.base.tabhighlight)$colors(curr.base.tabinactive)$colors(curr.highlight.selectbg)" foreach {k bg} [list \ indhover $colors(curr.base.tabhighlight) \ indnotactive $colors(curr.base.tabinactive) \ indselected $colors(curr.highlight.selectbg) \ ] { if { ! [info exists images($k.$bg)] } { set images($k.$bg) [image create photo \ -width $vars(nb.img.width) -height $vars(nb.img.height)] set row [lrepeat $vars(nb.img.width) $bg] set pix [list] for {set i 0} {$i < $vars(nb.img.height)} {incr i} { |
︙ | ︙ | |||
5547 5548 5549 5550 5551 5552 5553 | if { $theme eq {} } { set theme $vars(theme.name) } ttk::style theme settings $theme { # defaults ttk::style configure . \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 | if { $theme eq {} } { set theme $vars(theme.name) } ttk::style theme settings $theme { # defaults ttk::style configure . \ -background $colors(curr.base.frame) \ -foreground $colors(curr.text.text) \ -borderwidth 1 \ -bordercolor $colors(curr.base.border) \ -darkcolor $colors(curr.base.darkest) \ -lightcolor $colors(curr.base.darkest) \ -troughcolor $colors(curr.base.entrybg) \ -selectbackground $colors(curr.highlight.selectbg) \ -selectforeground $colors(curr.highlight.selectfg) \ -selectborderwidth 0 \ -fieldbackground $colors(curr.base.entrybg) \ -focuscolor $colors(curr.highlight.selectbg) \ -insertcolor $colors(curr.base.lightest) \ -relief none ttk::style map . \ -background [list disabled $colors(curr.base.frame)] \ -foreground [list active $colors(curr.text.text) \ focus $colors(curr.text.text) \ disabled $colors(curr.base.disabledfg)] \ -selectbackground [list !focus $colors(curr.base.darkest)] \ -selectforeground [list !focus $colors(curr.base.lightest)] \ -bordercolor [list disabled $colors(curr.base.disabledborder)] # button ttk::style configure TButton \ -bordercolor $colors(curr.base.frame) \ -background $colors(curr.base.dark) \ -lightcolor $colors(curr.base.lighter) \ -darkcolor $colors(curr.base.darker) ttk::style map TButton \ -background [list {hover !pressed !disabled} $colors(curr.base.bpress) \ {active !pressed} $colors(curr.base.bpress) \ {selected !disabled} $colors(curr.base.dark) \ pressed $colors(curr.base.dark) \ disabled $colors(curr.base.disabledbg)] \ -lightcolor [list pressed $colors(curr.base.darker)] \ -darkcolor [list pressed $colors(curr.base.lighter)] # checkbutton ttk::style map TCheckbutton \ -indicatorcolor [list selected $colors(curr.base.lightest)] \ -darkcolor [list disabled $colors(curr.base.frame)] \ -lightcolor [list disabled $colors(curr.base.frame)] # combobox ttk::style configure TCombobox \ -bordercolor $colors(curr.base.border) \ -lightcolor $colors(curr.base.dark) \ -darkcolor $colors(curr.base.dark) \ -arrowcolor $colors(curr.base.arrow) ttk::style map TCombobox \ -lightcolor [list active $colors(curr.highlight.selectbg) \ focus $colors(curr.highlight.selectbg)] \ -darkcolor [list active $colors(curr.highlight.selectbg) \ focus $colors(curr.highlight.selectbg)] \ -arrowcolor [list disabled $colors(curr.base.arrow.disabled)] \ -fieldbackground [list disabled $colors(curr.base.disabledbg)] if { $::tcl_platform(os) eq "Darwin" } { # mac os x has cross-platform incompatibilities ttk::style configure TCombobox \ -background $colors(curr.base.dark) ttk::style map TCombobox \ -background [list disabled $colors(curr.base.disabledbg)] } # entry ttk::style configure TEntry \ -background $colors(curr.base.dark) \ -bordercolor $colors(curr.base.border) \ -lightcolor $colors(curr.base.dark) ttk::style map TEntry \ -lightcolor [list active $colors(curr.highlight.selectbg) \ focus $colors(curr.highlight.selectbg)] \ -fieldbackground [list disabled $colors(curr.base.disabledbg)] if { $::tcl_platform(os) eq "Darwin" } { # mac os x has cross-platform incompatibilities ttk::style configure TEntry \ -background $colors(curr.base.dark) ttk::style map TEntry \ -background [list disabled $colors(curr.base.disabledbg)] } # frame ttk::style configure TFrame \ -bordercolor $colors(curr.base.frame) \ -lightcolor $colors(curr.base.lighter) \ -darkcolor $colors(curr.base.darker) # labelframe ttk::style configure TLabelframe \ -bordercolor $colors(curr.base.frame) \ -lightcolor $colors(curr.base.frame) \ -darkcolor $colors(curr.base.frame) # menubutton ttk::style configure TMenubutton \ -arrowcolor $colors(curr.base.arrow) ttk::style map TMenubutton \ -background [list {active !disabled} $colors(curr.highlight.selectbg)] \ -foreground [list {active !disabled} $colors(curr.highlight.selectfg) \ disabled $colors(curr.base.disabledfg)] \ -arrowcolor [list disabled $colors(curr.base.arrow.disabled)] # notebook ttk::style configure TNotebook \ -bordercolor $colors(curr.base.frame) \ -lightcolor $colors(curr.base.lighter) \ -darkcolor $colors(curr.base.darker) ttk::style configure TNotebook.Tab \ -lightcolor $colors(curr.base.frame) \ -darkcolor $colors(curr.base.frame) \ -bordercolor $colors(curr.base.tabborder) \ -background $colors(curr.base.dark) # panedwindow ttk::style configure TPanedwindow \ -background $colors(curr.base.dark) ttk::style configure Sash \ -lightcolor $colors(curr.highlight.darkhighlight) \ -darkcolor $colors(curr.base.darkest) \ -sashthickness [expr {round(10*$vars(scale.factor))}] # progressbar ttk::style configure TProgressbar \ -background $colors(curr.highlight.darkhighlight) \ -bordercolor $colors(curr.base.border.light) \ -lightcolor $colors(curr.highlight.darkhighlight) \ -darkcolor $colors(curr.highlight.darkhighlight) ttk::style map TProgressbar \ -troughcolor [list disabled $colors(curr.base.dark)] \ -darkcolor [list disabled $colors(curr.base.disabledbg)] \ -lightcolor [list disabled $colors(curr.base.disabledbg)] # scale # background is used both for the background and # for the grip colors ttk::style configure TScale \ -background $colors(curr.highlight.darkhighlight) \ -bordercolor $colors(curr.base.border.light) \ -lightcolor $colors(curr.highlight.darkhighlight) \ -darkcolor $colors(curr.highlight.darkhighlight) ttk::style map TScale \ -troughcolor [list disabled $colors(curr.base.dark)] \ -darkcolor [list disabled $colors(curr.base.disabledbg)] \ -lightcolor [list disabled $colors(curr.base.disabledbg)] # scrollbar ttk::style configure TScrollbar \ -background $colors(curr.highlight.selectbg) \ -bordercolor $colors(curr.base.border.light) \ -lightcolor $colors(curr.highlight.selectbg) \ -darkcolor $colors(curr.highlight.selectbg) \ -arrowcolor $colors(curr.base.lightest) ttk::style map TScrollbar \ -arrowcolor [list disabled $colors(curr.base.arrow.disabled)] \ -darkcolor [list disabled $colors(curr.base.frame)] \ -lightcolor [list disabled $colors(curr.base.frame)] # spinbox ttk::style configure TSpinbox \ -bordercolor $colors(curr.base.border) \ -lightcolor $colors(curr.base.dark) \ -arrowcolor $colors(curr.base.arrow) ttk::style map TSpinbox \ -lightcolor [list active $colors(curr.highlight.selectbg) \ focus $colors(curr.highlight.selectbg)] \ -darkcolor [list active $colors(curr.highlight.selectbg) \ focus $colors(curr.highlight.selectbg)] \ -arrowcolor [list disabled $colors(curr.base.arrow.disabled)] \ -fieldbackground [list disabled $colors(curr.base.disabledbg)] if { $::tcl_platform(os) eq "Darwin" } { # mac os x has cross-platform incompatibilities ttk::style configure TSpinbox \ -background $colors(curr.base.dark) ttk::style map TSpinbox \ -background [list disabled $colors(curr.base.disabledbg)] } # treeview ttk::style configure Treeview \ -fieldbackground $colors(curr.base.frame) ttk::style map Treeview \ -background [list selected $colors(curr.highlight.selectbg)] \ -foreground [list selected $colors(curr.highlight.selectfg)] } } proc setBackground { bcol } { variable colors variable vars |
︙ | ︙ | |||
5814 5815 5816 5817 5818 5819 5820 | variable images variable vars if { ! [dict exists $vars(cache.menu) $w] } { dict set vars(cache.menu) $w 1 } | | | | | | | | 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 | variable images variable vars if { ! [dict exists $vars(cache.menu) $w] } { dict set vars(cache.menu) $w 1 } $w configure -background $colors(curr.base.frame) $w configure -foreground $colors(curr.text.text) $w configure -activebackground $colors(curr.highlight.selectbg) $w configure -activeforeground $colors(curr.highlight.selectfg) $w configure -disabledforeground $colors(curr.base.disabledfg) $w configure -selectcolor $colors(curr.highlight.selectbg) set max [$w index end] if { $max eq "none" } { return } # the standard menu does not have a -mode option |
︙ | ︙ | |||
5859 5860 5861 5862 5863 5864 5865 | variable images variable vars if { ! [dict exists $vars(cache.listbox) $w] } { dict set vars(cache.listbox) $w 1 } | | | | | | | | | | | | | | | 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 | variable images variable vars if { ! [dict exists $vars(cache.listbox) $w] } { dict set vars(cache.listbox) $w 1 } $w configure -background $colors(curr.base.frame) $w configure -foreground $colors(curr.text.text) $w configure -disabledforeground $colors(curr.base.disabledfg) $w configure -selectbackground $colors(curr.highlight.selectbg) $w configure -selectforeground $colors(curr.highlight.selectfg) $w configure -borderwidth 1p $w configure -relief solid } proc setTextColors { w {useflag {}} } { variable colors variable images variable vars if { ! [dict exists $vars(cache.text) $w] } { dict set vars(cache.text) $w $useflag } if { $useflag eq "-entry" } { $w configure -background $colors(curr.base.entrybg) } elseif { $useflag eq "-dark" } { $w configure -background $colors(curr.base.dark) } else { $w configure -background $colors(curr.base.frame) } $w configure -foreground $colors(curr.text.text) $w configure -selectforeground $colors(curr.highlight.selectfg) $w configure -selectbackground $colors(curr.highlight.selectbg) $w configure -inactiveselectbackground $colors(curr.base.darkest) $w configure -borderwidth 1p } proc awCboxHandler { w } { variable vars variable colors set theme [ttk::style theme use] if { [info exists colors(curr.base.entrybg)] && $theme eq $vars(theme.name) && ! [dict exists $vars(cache.listbox) $w] } { ::ttk::theme::${vars(theme.name)}::setListboxColors $w } } init } } } awinit unset -nocomplain ::awthemename |
Changes to assets/awthemes3/pkgIndex.tcl.
|
| | | > > | | | 1 2 3 4 5 6 7 8 9 10 11 12 | package ifneeded awdark 3.1 \ [list source [file join $dir awthemes.tcl]] package ifneeded awlight 3.1 \ [list source [file join $dir awthemes.tcl]] package ifneeded colorutils 4.3 \ [list source [file join $dir colorutils.tcl]] package ifneeded themeutils 1.0 \ [list source [file join $dir themeutils.tcl]] package ifneeded ttk::theme::awdark 3.1 \ [list source [file join $dir awthemes.tcl]] package ifneeded ttk::theme::awlight 3.1 \ [list source [file join $dir awthemes.tcl]] |
Added assets/awthemes3/themeutils.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #!/usr/bin/tclsh # # themeutils.tcl # # Copyright 2019 Brad Lanam Pleasant Hill, CA # # zlib/libpng license # package provide themeutils 1.0 namespace eval ::themeutils { variable vars proc init {} { variable vars set vars(names.colors.base) { base.disabledfg base.disabledbg base.disabledborder base.frame base.dark base.darker base.darkest base.bpress base.lighter base.lightest highlight.selectbg highlight.selectdisabledbg highlight.darkhighlight highlight.selectfg } set vars(names.colors.derived) { base.arrow base.arrow.disabled base.border base.border.light text.text base.tabborder base.tabinactive base.tabhighlight base.entrybg } # derived colors: # base.arrow # awdark: base.lightest awlight: base.darkest # base.arrow.disabled # awdark: base.lighter awlight: base.darker # base.border # awdark: base.darkest awlight: base.dark # base.border.light # awdark: base.darkest awlight: base.dark # text.text # awdark: base.lightest awlight: base.darkest # base.tabborder # awdark: base.darkest awlight: base.frame # base.tabinactive # awdark: base.frame awlight: base.darker # base.tabhighlight # awdark: #8b9ca1 awlight: base.darkest # base.entrybg # awdark: base.darker awlight: base.lightest } proc setThemeColors { theme args } { variable vars namespace eval ::ttk::theme::$theme {} foreach {cn col} $args { set ::ttk::theme::${theme}::colors(user.$cn) $col } } init } |
Changes to jni/sdl2tk/win/tkWinPointer.c.
︙ | ︙ | |||
358 359 360 361 362 363 364 365 366 | */ void TkSetCursorPos( int x, int y) { INPUT input; input.type = INPUT_MOUSE; | > > | | | 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 | */ void TkSetCursorPos( int x, int y) { INPUT input; unsigned xscreen = (GetSystemMetrics(SM_CXSCREEN) - 1); unsigned yscreen = (GetSystemMetrics(SM_CYSCREEN) - 1); input.type = INPUT_MOUSE; input.mi.dx = (x * 65535 + xscreen/2) / xscreen; input.mi.dy = (y * 65535 + yscreen/2) / yscreen; input.mi.mouseData = 0; input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE; input.mi.time = 0; input.mi.dwExtraInfo = 0; SendInput(1, &input, sizeof(input)); } |
︙ | ︙ |
Changes to jni/topcua/open62541/AUTHORS.
1 2 3 4 5 6 7 8 9 | The authors of open62541 are (in alphabetical order) Bauer, Maximilian Ebrahimi, Reza <reza.ebrahimi.dev (at) gmail.com> Graube, Markus <markus.graube (at) tu-dresden.de> Gruener, Sten <s.gruener (at) plt.rwth-aachen.de> Iatrou, Chris Paul <chris_paul.iatrou (at) tu-dresden.de> Jeromin, Holger Palm, Florian <f.palm (at) plt.rwth-aachen.de> | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | The authors of open62541 are (in alphabetical order) Bauer, Maximilian Ebrahimi, Reza <reza.ebrahimi.dev (at) gmail.com> Graube, Markus <markus.graube (at) tu-dresden.de> Gruener, Sten <s.gruener (at) plt.rwth-aachen.de> Iatrou, Chris Paul <chris_paul.iatrou (at) tu-dresden.de> Jeromin, Holger Palm, Florian <f.palm (at) plt.rwth-aachen.de> Pfrommer, Julius <julius.pfrommer (at) iosb.fraunhofer.edu> Profanter, Stefan <profanter (at) fortiss.org> Stalder, Thomas <t.stalder (at) bluetimeconcept.ch> Urbas, Leon <leon.urbas (at) tu-dresden.de> |
Changes to jni/topcua/open62541/README.md.
|
| | < | | < < < < < < < | < > < > | > | | > > < | < | | > > | > > | > | > | > | > > | | > > > > | > > > > | < < > | > > > > > > | | < | < | > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > | > < | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | # open62541 open62541 (<http://open62541.org>) is an open source and free implementation of OPC UA (OPC Unified Architecture) written in the common subset of the C99 and C++98 languages. The library is usable with all major compilers and provides the necessary tools to implement dedicated OPC UA clients and servers, or to integrate OPC UA-based communication into existing applications. open62541 library is platform independent. All platform-specific functionality is implemented via exchangeable plugins. Plugin implementations are provided for the major operating systems. open62541 is licensed under the Mozilla Public License v2.0 (MPLv2). This allows the open62541 library to be combined and distributed with any proprietary software. Only changes to the open62541 library itself need to be licensed under the MPLv2 when copied and distributed. The plugins, as well as the server and client examples are in the public domain (CC0 license). They can be reused under any license and changes do not have to be published. The library is [available](https://github.com/open62541/open62541/releases) in standard source and binary form. In addition, the single-file source distribution merges the entire library into a single .c and .h file that can be easily added to existing projects. Example server and client implementations can be found in the [/examples](examples/) directory or further down on this page. ### Features and Certification open62541 implements the OPC UA binary protocol stack as well as a client and server SDK. The final server binaries can be well under 100kb, depending on the selected features and the size of the information model. - Communication Stack - OPC UA binary protocol - OPC UA JSON encoding - Secure communication with encrypted messages - Exchangeable network layer (plugin) for using custom networking APIs (e.g. on embedded targets) - Support for generating data types from standard XML definitions - Server - Support for all OPC UA node types - Access control for individual nodes - Support for generating server-side information models from standard XML definitions (nodesets) - Support for adding and removing nodes and references also at runtime. - Support for inheritance and instantiation of object- and variable-types (custom constructor/destructor, instantiation of child nodes) - Support for subscriptions/monitoreditems (data change notifications and events) - Client - All OPC UA services supported - Asynchronous service requests - Background handling of subscriptions - Publish/Subscribe - UADP Binary protocol with UDP-multicast or Ethernet communication - PubSub JSON encoding ### Official Certification The sample server (server_ctt) built using open62541 v1.0 is in conformance with the 'Micro Embedded Device Server' Profile of OPC Foundation supporting OPC UA client/server communication, subscriptions, method calls and security (encryption) with the security policies 'Basic128Rsa15', 'Basic256' and 'Basic256Sha256' and the facets 'method server' and 'node management'. See https://open62541.org/certified-sdk for more details. PubSub (UADP) is implemented in open62541. But the feature cannot be certified at this point in time (Sep-2019) due to the lack of official test cases and testing tools. During development, the Conformance Testing Tools (CTT) of the OPC Foundation are regularly applied. The CTT configuration and results are tracked at https://github.com/open62541/open62541-ctt. The OPC UA profiles under regular test in the CTT are currently: - Micro Embedded Device Server - Method Server Facet - Node Management Facet - Security Policies - Basic128Rsa15 - Basic256 - Basic256Sha256 - User Tokens - Anonymous Facet - User Name Password Server Facet See the page on [open62541 Features](FEATURES.md) for an in-depth look at the support for the conformance units that make up the OPC UA profiles. ### Dependencies On most systems, open62541 requires the C standard library only. For dependencies during the build process, see the following list and the [build documentation](https://open62541.org/doc/current/building.html) for details. - Core Library: The core library has no dependencies besides the C99 standard headers. - Default Plugins: The default plugins use the POSIX interfaces for networking and accessing the system clock. Ports to different (embedded) architectures are achieved by customizing the plugins. - Building and Code Generation: The build environment is generated via CMake. Some code is auto-generated from XML definitions that are part of the OPC UA standard. The code generation scripts run with both Python 2 and 3. **Note:** Specific optional features are dependent on third-party libraries. These are all listed under the `deps/` folder. Depending on the selected feature set, some of these libraries will be included in the resulting library. More information on the third-party libraries can be found in the corresponding [deps/README.md](deps/README.md) ### Code Quality We emphasize code quality. The following quality metrics are continuously checked and are ensured to hold before an official release is made: - Zero errors indicated by the Compliance Testing Tool (CTT) of the OPC Foundation for the supported features - Zero compiler warnings from GCC/Clang/MSVC with very strict compilation flags - Zero issues indicated by unit tests (more than 80% coverage) - Zero issues indicated by clang-analyzer, clang-tidy, cpp-check and the Codacy static code analysis tools - Zero unresolved issues from fuzzing the library in Google's oss-fuzz infrastructure - Zero issues indicated by Valgrind (Linux), DrMemory (Windows) and Clang AddressSanitizer / MemorySanitizer for the CTT tests, unit tests and fuzzing ### Documentation and Support A general introduction to OPC UA and the open62541 documentation can be found at http://open62541.org/doc/current. Past releases of the library can be downloaded at https://github.com/open62541/open62541/releases. To use the latest improvements, download a nightly build of the *single-file distribution* (the entire library merged into a single source and header file) from http://open62541.org/releases. Nightly builds of MSVC binaries of the library are available [here](https://ci.appveyor.com/project/open62541/open62541/build/artifacts). For individual discussion and support, use the following channels: - the [mailing list](https://groups.google.com/d/forum/open62541) - our [IRC channel](http://webchat.freenode.net/?channels=%23open62541) - the [bugtracker](https://github.com/open62541/open62541/issues) We want to foster an open and welcoming community. Please take our [code of conduct](CODE_OF_CONDUCT.md) into regard. Jointly with the overall open62541 community, the core maintainers steer the long-term development. The current core maintainers are (as of April 2018, in alphabetical order): - Chris-Paul Iatrou (Dresden University of Technology, Chair for Process Control Systems Engineering) - Florian Palm (RWTH Aachen University, Chair of Process Control Engineering) - Julius Pfrommer (Fraunhofer IOSB, Karlsruhe) - Stefan Profanter (fortiss, Munich) ## Support & Development ### Commercial Support The open62541 community handles support requests for the open source library and its development. Custom development and individual support is provided by commercial partners that are affiliated with open62541: - [Kalycito Infotech, Tamil Nadu, INDIA](https://www.kalycito.com/landing/open62541-commercial-partner) for embedded and realtime IIoT applications (Contact: enterprise.services@kalycito.com) - [basysKom GmbH, Darmstadt, Germany](https://www.basyskom.com/) Software Engineering for Embedded Systems. (Contact: info@basysKom.com) For custom development that shall eventually become part of the open62541 library, please keep one of the core maintainers in the loop. Again, please note that all changes to files that are already licensed under the MPLv2 automatically become MPLv2 as well. Static linking of the open62541 library with code under a different license is possible. All architecture-specific code is implemented in the form of exchangeable plugins under a very permissible CC0 license. ### Development As an open source project, new contributors are encouraged to help improve open62541. The following are good starting points for new contributors: - [Report bugs](https://github.com/open62541/open62541/issues) - Improve the [documentation](http://open62541.org/doc/current) - Work on issues marked as "[good first issue](https://github.com/open62541/open62541/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)" ### Success Stories and Users of open62541 A list of projects and companies using our open62541 stack can be found in our Wiki: https://github.com/open62541/open62541/wiki/References-to-open62541 ## Installation and code usage For every release, we provide some pre-packed release packages which you can directly use in your compile infrastructure. Have a look at the [release page](https://github.com/open62541/open62541/releases) and the corresponding attached assets. A more detailed explanation on how to install the open62541 SDK is given in our [documentation](https://open62541.org/doc/current/installing.html). You can not directly download a .zip package from the main branches using the Github UI, since then some of the submodules and version strings are missing. Therefore you have three options to install and use this stack: - **Recommended:** Use any of the prepared packages attached to every release or in the package repository of your distro (if available). Please check the install guide for more info. - Download a .zip package of special `pack/` branches. These pack branches are up-to-date with the corresponding base branches, but already have the submodules in-place and the version string set correctly. Here are some direct download links for the current pack branches: - [pack/master.zip](https://github.com/open62541/open62541/archive/pack/master.zip) - [pack/1.0.zip](https://github.com/open62541/open62541/archive/pack/1.0.zip) - Clone this repository and initialize all the submodules using `git submodule update --init --recursive`. Then either use `make install` or setup your CMake project correspondingly. ## Examples A complete list of examples can be found in the [examples directory](https://github.com/open62541/open62541/tree/master/examples). To build the examples, we recommend to install the open62541 project as mentioned in previous section. ### Example Server Implementation The following simple server example can be built using gcc, after you installed open62541 on your system. Using the GCC compiler, just run ```gcc -std=c99 -lopen62541 -DUA_ARCHITECTURE_POSIX <server.c> -o server``` (under Windows you may need to add ``` -lws2_32``` and change `-DUA_ARCHITECTURE_POSIX` to `-DUA_ARCHITECTURE_WIN32`). ```c #include <signal.h> #include <open62541/server.h> #include <open62541/server_config_default.h> UA_Boolean running = true; void signalHandler(int sig) { running = false; } int main(int argc, char** argv) { signal(SIGINT, signalHandler); /* catch ctrl-c */ /* Create a server listening on port 4840 */ UA_Server *server = UA_Server_new(); UA_ServerConfig_setDefault(UA_Server_getConfig(server)); /* Add a variable node */ /* 1) Define the node attributes */ UA_VariableAttributes attr = UA_VariableAttributes_default; attr.displayName = UA_LOCALIZEDTEXT("en-US", "the answer"); UA_Int32 myInteger = 42; UA_Variant_setScalar(&attr.value, &myInteger, &UA_TYPES[UA_TYPES_INT32]); |
︙ | ︙ | |||
127 128 129 130 131 132 133 134 | /* 3) Add the node */ UA_Server_addVariableNode(server, newNodeId, parentNodeId, parentReferenceNodeId, browseName, variableType, attr, NULL, NULL); /* Run the server loop */ UA_StatusCode status = UA_Server_run(server, &running); UA_Server_delete(server); | > < | > | > | 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | /* 3) Add the node */ UA_Server_addVariableNode(server, newNodeId, parentNodeId, parentReferenceNodeId, browseName, variableType, attr, NULL, NULL); /* Run the server loop */ UA_StatusCode status = UA_Server_run(server, &running); UA_Server_delete(server); return status; } ``` ### Example Client Implementation ```c #include <stdio.h> #include <open62541/client.h> #include <open62541/client_config_default.h> int main(int argc, char *argv[]) { /* Create a client and connect */ UA_Client *client = UA_Client_new(); UA_ClientConfig_setDefault(UA_Client_getConfig(client)); UA_StatusCode status = UA_Client_connect(client, "opc.tcp://localhost:4840"); if(status != UA_STATUSCODE_GOOD) { UA_Client_delete(client); return status; } /* Read the value attribute of the node. UA_Client_readValueAttribute is a |
︙ | ︙ |
Changes to jni/topcua/open62541/chw.patch.
1 2 3 4 | The following patch relaxes type checking on attribute R/W functions. This simplifies the "opcua read ..." and "opcua write ..." logic. Another change allows the server's logger to be fully overriden. It changes the default timeout to 10 milliseconds and adds some | | | | | | < > | | | | > | > > > | > > | > > > > > > > > > > > > > > > > > > | < < < < < < | < < < < < < < | < < < < < < < < < < | < < < < < < < < < | < | | > > > > > > | > > > < < < < < < | < | < < < < < < < < < < < < < < | | | | < | < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | The following patch relaxes type checking on attribute R/W functions. This simplifies the "opcua read ..." and "opcua write ..." logic. Another change allows the server's logger to be fully overriden. It changes the default timeout to 10 milliseconds and adds some functions to set the custom data type array on client and server. --- open62541.c.orig 2019-10-10 17:56:09.000000000 +0200 +++ open62541.c 2019-10-11 15:42:00.506190943 +0200 @@ -22428,7 +22428,7 @@ /* Main Server Loop */ /********************/ -#define UA_MAXTIMEOUT 50 /* Max timeout in ms between main-loop iterations */ +#define UA_MAXTIMEOUT 10 /* Max timeout in ms between main-loop iterations */ /* Start: Spin up the workers and the network layer and sample the server's * start time. @@ -41415,7 +41415,7 @@ UA_WriteValue_init(&wValue); wValue.nodeId = *nodeId; wValue.attributeId = attributeId; - if(attributeId == UA_ATTRIBUTEID_VALUE) + if(attributeId == UA_ATTRIBUTEID_VALUE && inDataType == &UA_TYPES[UA_TYPES_VARIANT]) wValue.value.value = *(const UA_Variant*)in; else /* hack. is never written into. */ @@ -41518,13 +41518,16 @@ if(attributeId == UA_ATTRIBUTEID_VALUE) { memcpy(out, &res->value, sizeof(UA_Variant)); UA_Variant_init(&res->value); - } else if(attributeId == UA_ATTRIBUTEID_NODECLASS) { + } else if(attributeId == UA_ATTRIBUTEID_NODECLASS && outDataType != &UA_TYPES[UA_TYPES_VARIANT]) { memcpy(out, (UA_NodeClass*)res->value.data, sizeof(UA_NodeClass)); } else if(UA_Variant_isScalar(&res->value) && res->value.type == outDataType) { memcpy(out, res->value.data, res->value.type->memSize); UA_free(res->value.data); res->value.data = NULL; + } else if(UA_Variant_isScalar(&res->value) && outDataType == &UA_TYPES[UA_TYPES_VARIANT]) { + memcpy(out, &res->value, sizeof(UA_Variant)); + UA_Variant_init(&res->value); } else { retval = UA_STATUSCODE_BADUNEXPECTEDERROR; } @@ -51591,16 +51594,22 @@ static UA_StatusCode setDefaultConfig(UA_ServerConfig *conf) { + UA_Logger logger; + if (!conf) return UA_STATUSCODE_BADINVALIDARGUMENT; + logger = conf->logger; + if (logger.log == NULL) + logger = UA_Log_Stdout_; + /* Zero out.. All members have a valid initial value */ UA_ServerConfig_clean(conf); memset(conf, 0, sizeof(UA_ServerConfig)); /* --> Start setting the default static config <-- */ conf->nThreads = 1; - conf->logger = UA_Log_Stdout_; + conf->logger = logger; conf->shutdownDelay = 0.0; @@ -56830,7 +56839,7 @@ time_t gmt, rawtime = time(NULL); struct tm ptm; - gmtime_s(&ptm, &rawtime); + ptm = *gmtime(&rawtime); // Request that mktime() looksup dst in timezone database ptm.tm_isdst = -1; gmt = mktime(&ptm); @@ -57915,3 +57924,17 @@ return connection; } + +UA_StatusCode +UA_Client_setCustomDataTypes(UA_Client *client, const UA_DataTypeArray *types) { + client->config.customDataTypes = types; + + return UA_STATUSCODE_GOOD; +} + +UA_StatusCode +UA_Server_setCustomDataTypes(UA_Server *server, const UA_DataTypeArray *types) { + server->config.customDataTypes = types; + + return UA_STATUSCODE_GOOD; +} --- open62541.h.orig 2019-10-10 17:56:09.000000000 +0200 +++ open62541.h 2019-10-11 15:40:15.785621699 +0200 @@ -95,7 +95,7 @@ * On Win32: Define ``UA_DYNAMIC_LINKING`` and ``UA_DYNAMIC_LINKING_EXPORT`` in * order to export symbols for a DLL. Define ``UA_DYNAMIC_LINKING`` only to * import symbols from a DLL.*/ -#define UA_DYNAMIC_LINKING +/* #undef UA_DYNAMIC_LINKING */ /* Shortcuts for extern "C" declarations */ #if !defined(_UA_BEGIN_DECLS) @@ -23139,7 +23139,7 @@ * @param server The server object. * @param waitInternal Should we wait for messages in the networklayer? * Otherwise, the timouts for the networklayers are set to zero. - * The default max wait time is 50millisec. + * The default max wait time is 10millisec. * @return Returns how long we can wait until the next scheduled * callback (in ms) */ UA_UInt16 UA_EXPORT @@ -30420,6 +30420,11 @@ #define UA_fileExists(X) ( UA_access(X, 0) == 0) #endif +UA_StatusCode UA_EXPORT +UA_Client_setCustomDataTypes(UA_Client *client, const UA_DataTypeArray *types); + +UA_StatusCode UA_EXPORT +UA_Server_setCustomDataTypes(UA_Server *server, const UA_DataTypeArray *types); _UA_END_DECLS |
Changes to jni/topcua/open62541/open62541.c.
more than 10,000 changes
Changes to jni/topcua/open62541/open62541.h.
more than 10,000 changes
Changes to jni/topcua/open62541/open62541.pdf.
cannot compute difference between binary files