Hello community, here is the log from the commit of package umbrello for openSUSE:Factory checked in at 2017-01-23 11:38:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/umbrello (Old) and /work/SRC/openSUSE:Factory/.umbrello.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "umbrello" Changes: -------- --- /work/SRC/openSUSE:Factory/umbrello/umbrello.changes 2016-12-17 11:02:12.889068553 +0100 +++ /work/SRC/openSUSE:Factory/.umbrello.new/umbrello.changes 2017-01-23 11:38:58.528385310 +0100 @@ -1,0 +2,7 @@ +Sat Jan 14 09:11:16 UTC 2017 - [email protected] + +- - Update to KDE Applications 16.12.1 + * KDE Applications 16.12.1 + * https://www.kde.org/announcements/announce-applications-16.12.1.php + +------------------------------------------------------------------- Old: ---- umbrello-16.12.0.tar.xz New: ---- umbrello-16.12.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ umbrello.spec ++++++ --- /var/tmp/diff_new_pack.KxOKFw/_old 2017-01-23 11:38:59.080307031 +0100 +++ /var/tmp/diff_new_pack.KxOKFw/_new 2017-01-23 11:38:59.084306464 +0100 @@ -24,7 +24,7 @@ License: GPL-2.0 and GFDL-1.2 Group: Development/Tools/Other Url: http://www.kde.org/ -Version: 16.12.0 +Version: 16.12.1 Release: 0 Source0: %{name}-%{version}.tar.xz BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ umbrello-16.12.0.tar.xz -> umbrello-16.12.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/CMakeLists.txt new/umbrello-16.12.1/CMakeLists.txt --- old/umbrello-16.12.0/CMakeLists.txt 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/CMakeLists.txt 2017-01-09 20:11:13.000000000 +0100 @@ -3,7 +3,7 @@ # KDE Application Version, managed by release script set (KDE_APPLICATIONS_VERSION_MAJOR "16") set (KDE_APPLICATIONS_VERSION_MINOR "12") -set (KDE_APPLICATIONS_VERSION_MICRO "0") +set (KDE_APPLICATIONS_VERSION_MICRO "1") set(UMBRELLO_VERSION_MAJOR "2") MATH(EXPR UMBRELLO_VERSION_MINOR "9+${KDE_APPLICATIONS_VERSION_MINOR}") @@ -163,6 +163,7 @@ KIO TextEditor WidgetsAddons + WindowSystem XmlGui ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/lib/cppparser/driver.h new/umbrello-16.12.1/lib/cppparser/driver.h --- old/umbrello-16.12.0/lib/cppparser/driver.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/lib/cppparser/driver.h 2017-01-09 20:11:13.000000000 +0100 @@ -21,6 +21,7 @@ #include "ast.h" +#include "debug_utils.h" #include "macro.h" #include <qpair.h> #include <QStringList> @@ -109,7 +110,7 @@ TranslationUnitAST* operator -> () const { - if (!this) return 0; + uCheckPointerAndReturnIfZero(this); return (TranslationUnitAST*)m_translationUnit.data(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/maintainer/release-windows-packages new/umbrello-16.12.1/maintainer/release-windows-packages --- old/umbrello-16.12.0/maintainer/release-windows-packages 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/maintainer/release-windows-packages 2017-01-09 20:11:13.000000000 +0100 @@ -6,20 +6,11 @@ # # requirements: # -# osc - opensuse command line client +# osc - opensuse build service command line client # # syntax: release-windows-packages <mode> # -# where mode is: -# -# clean - clean working area -# fetch - fetch file lists from opensuse download server -# download - download rpm packages -# unpack - unpack rpm files -# repack - repackage source tar ball to 7z -# upload - upload files to ftp:/upload.kde.org -# ticket - file a tar ball move request -# all - performs all above mentioned steps +# run ./release-windows-packages to see all modes # REPO=openSUSE_42.2 VERSION=2.20.90 @@ -34,11 +25,11 @@ fi case $1 in -clean) +clean) ## clean working area rm -rf work/* ;; -download) +download) ## download rpm packages cd work rm -rf binaries osc $oscoptions getbinaries windows\:mingw:\win32 mingw32-umbrello-installer $REPO x86_64 @@ -50,15 +41,15 @@ #src64pkg=$(osc $oscoptions ls -b -r $REPO -a x86_64 windows:mingw:win64 mingw64-umbrello | grep src) #osc $oscoptions getbinaries --sources windows\:mingw:\win32 mingw64-umbrello $REPO x86_64 $src64pkg # fetch debug packages - #debug32pkg=$(osc $oscoptions ls -b -r $REPO -a x86_64 windows:mingw:win32 mingw32-umbrello | grep debug) - #osc $oscoptions getbinaries windows\:mingw:\win32 mingw32-umbrello $REPO x86_64 $debug32pkg - #debug64pkg=$(osc $oscoptions ls -b -r $REPO -a x86_64 windows:mingw:win64 mingw64-umbrello | grep debug) - #osc $oscoptions getbinaries windows\:mingw:\win64 mingw64-umbrello $REPO x86_64 $debug64pkg + debug32pkg=$(osc $oscoptions ls -b -r $REPO -a x86_64 windows:mingw:win32 mingw32-umbrello | grep debug) + osc $oscoptions getbinaries windows\:mingw:\win32 mingw32-umbrello $REPO x86_64 $debug32pkg + debug64pkg=$(osc $oscoptions ls -b -r $REPO -a x86_64 windows:mingw:win64 mingw64-umbrello | grep debug) + osc $oscoptions getbinaries windows\:mingw:\win64 mingw64-umbrello $REPO x86_64 $debug64pkg ;; -unpack) +unpack) ## unpack rpm files cd work - files=$(find binaries -name *installer* -o -name *portable* -o -name *src* | grep "$VERSION") + files=$(find binaries -name *installer* -o -name *portable* -o -name *src* -o -name *debug* | grep "$VERSION") if test -d tmp; then rm -rf tmp fi @@ -66,44 +57,71 @@ for i in $(echo $files); do (cd tmp; rpm2cpio ../$i | cpio -idmv) done - # move binary packages + ;; + +movepackage) ## move windows binary packages into upload folder + cd work rm -rf out mkdir -p out - find tmp/ -name '*.exe' -exec mv {} out \; - find tmp/ -name '*.7z' -exec mv {} out \; + find tmp/ -type f -name '*.exe' -exec cp {} out \; + find tmp/ -type f -name '*.7z' -exec cp {} out \; + ;; + +packdebug) ## package debug package + cd work + rm -rf out/*debug*.7z + arch=mingw32 + version=$(find binaries/ -name *$arch*debug* | sed 's,.*debug-,,g;s,\.noarch.*,,g') + dir=tmp/usr/i686-w64-mingw32/sys-root/mingw + outfile=$PWD/out/umbrello-i686-w64-mingw32-$version-debug.7z + (cd $dir; 7z a -r -mx=9 $outfile *.debug *.sym) + + arch=mingw64 + version=$(find binaries/ -name *$arch*debug* | sed 's,.*debug-,,g;s,\.noarch.*,,g') + dir=tmp/usr/x86_64-w64-mingw32/sys-root/mingw + outfile=$PWD/out/umbrello-x86_64-w64-mingw32-$version-debug.7z + (cd $dir; 7z a -r -mx=9 $outfile *.debug *.sym) ;; -repack) +repacksource) ## repackage source tar ball to 7z # repackage source package srcfile=$(find work/tmp -name '*.xz') outfile=$(basename $srcfile | sed 's,\.tar\.xz,\.7z,g') (mkdir -p work/srctmp; cd work/srctmp; tar -xJf ../../$srcfile; 7za a ../out/$outfile *; cd ..; rm -rf srctmp) - # create sha256sums - (cd work/out; sha256sum *.7z *.exe > umbrello.sha256sum) ;; -upload) - # upload +createsha) ## create sha256sums + (cd work/out; find -type f -name '*.7z' -o -name '*.exe' | sed 's,\./,,g' | sort | xargs sha256sum > umbrello.sha256sum) + ;; + +upload) ## upload files to staging area for i in $(find work/out -name '*.7z' -o -name '*.exe'); do - curl -T $i ftp://upload.kde.org/incoming/ + curl -T $i ftp://upload.kde.org/incoming/ done ;; -ticket) +createdescription) ## create ticket description description="Please move the umbrello related files which has been uploaded to upload.kde.org/incoming to download mirror 'stable/umbrello/$VERSION' location and please update the symbolic link 'stable/umbrello/latest' to 'stable/umbrello/$VERSION'" - sums=$(cat work/out/umbrello.sha256sum | sort -n | gawk 'BEGIN { print "dir shasum file"} $2 ~ /i686/ { print "win32 " $0 } $2 ~ /x86_64/ { print "win64 " $0 } $2 ~ /umbrello-[0-9]/ { print "src " $0 }') - description=$(echo -e "$description\n\n$sums") + sums=$(cat work/out/umbrello.sha256sum | gawk 'BEGIN { print "dir shasum file"} $2 ~ /i686/ { print "win32 " $0 } $2 ~ /x86_64/ { print "win64 " $0 } $2 ~ /umbrello-[0-9]/ { print "src " $0 }') + echo -e "$description\n\n$sums" + ;; + +ticket) ## submit phabricator ticket + description=$($0 createdescription) curl $PHABURL/api/maniphest.createtask \ -d api.token=$apitoken \ -d "title=tarball move request for stable/umbrello/$VERSION" \ -d "description=$description" \ -d "$options" ;; -all) + +all) ## run all required targets $0 clean $0 download $0 unpack - $0 repack + $0 movepackage + $0 repacksource + $0 createsha $0 upload $0 ticket ;; @@ -111,6 +129,10 @@ *) echo "Make sure to setup VERSION inside $0 and run" echo "$0 all" + echo + echo "or run single targets" + echo + gawk '$0 ~ /^[a-z].*) ##/ { sub(/) ##/,"",$0); a = $1; $1 = ""; printf(" %-20s - %s\n",a, $0); }' $0 ;; esac diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/models/UmbrelloArchitecture/umlmodel.xmi new/umbrello-16.12.1/models/UmbrelloArchitecture/umlmodel.xmi --- old/umbrello-16.12.0/models/UmbrelloArchitecture/umlmodel.xmi 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/models/UmbrelloArchitecture/umlmodel.xmi 2017-01-09 20:11:13.000000000 +0100 @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<XMI verified="false" xmi.version="1.2" timestamp="2016-09-08T09:21:22" xmlns:UML="http://schema.omg.org/spec/UML/1.3"> +<XMI verified="false" xmi.version="1.2" timestamp="2016-12-07T15:41:11" xmlns:UML="http://schema.omg.org/spec/UML/1.3"> <XMI.header> <XMI.documentation> <XMI.exporter>umbrello uml modeller http://umbrello.kde.org</XMI.exporter> - <XMI.exporterVersion>1.6.10</XMI.exporterVersion> + <XMI.exporterVersion>1.6.11</XMI.exporterVersion> <XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding> </XMI.documentation> <XMI.metamodel xmi.version="1.3" href="UML.xml" xmi.name="UML"/> @@ -3277,6 +3277,54 @@ <UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="TAoUrco7Ay7k" xmi.id="gO7Qpzh1cajf" parent="MiNwPJtCBwbc" name=""/> <UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="qzPQClI4rXhy" name="QObject*"/> <UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="zKeUCT61MFDV" name="client"/> + <UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="IPgsE6pvMDOS" comment="This class contains the non-graphical information required for a UML Datatype.
This class inherits from @ref UMLClassifier which contains most
of the information.

@short Non-graphical information for a Datatype.
@see UMLClassifier
Bugs and comments to [email protected] or http://bugs.kde.org" name="UMLDatatype"> + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="poaSnVGpabWV"/> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Attribute visibility="protected" isSpecification="false" xmi.id="yo92eJiU9of8" type="n7aGFKb1ZnwJ" name="m_isRef"/> + <UML:Operation stereotype="constructor" visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="TPI1ymWBB2Jx" name="UMLDatatype"> + <UML:BehavioralFeature.parameter> + <UML:Parameter visibility="private" isSpecification="false" xmi.id="2B1Qiv2JdZEW" type="bAIcUIEX6vYI" value="" name="name"/> + <UML:Parameter visibility="private" isSpecification="false" xmi.id="TaG9VPaymqyl" type="5S6muohkOTCO" value="" name="id"/> + </UML:BehavioralFeature.parameter> + </UML:Operation> + <UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="dSuoSDjTOit5" name="~ UMLDatatype"/> + <UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="cwOFTblu9z1e" name="setOriginType"> + <UML:BehavioralFeature.parameter> + <UML:Parameter visibility="private" isSpecification="false" xmi.id="NZb9QZs3zmpS" type="VuGgnzWeCLmX" value="" name="origType"/> + </UML:BehavioralFeature.parameter> + </UML:Operation> + <UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="zZvMHmRtin6A" name="originType"> + <UML:BehavioralFeature.parameter> + <UML:Parameter kind="return" xmi.id="Mp2Vp4AAdjH1" type="VuGgnzWeCLmX"/> + </UML:BehavioralFeature.parameter> + </UML:Operation> + <UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="IA4FuuhsRaCi" name="setIsReference"> + <UML:BehavioralFeature.parameter> + <UML:Parameter visibility="private" isSpecification="false" xmi.id="Nda3OgDlWEEJ" type="n7aGFKb1ZnwJ" value="" name="isRef"/> + </UML:BehavioralFeature.parameter> + </UML:Operation> + <UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="GMRt5ivLqxbj" name="isReference"> + <UML:BehavioralFeature.parameter> + <UML:Parameter kind="return" xmi.id="pGbGrnxEOXHk" type="n7aGFKb1ZnwJ"/> + </UML:BehavioralFeature.parameter> + </UML:Operation> + <UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="BTVffiwv2No8" name="loadFromXMI"> + <UML:BehavioralFeature.parameter> + <UML:Parameter kind="return" xmi.id="xcML7b6I2Zwh" type="n7aGFKb1ZnwJ"/> + <UML:Parameter visibility="private" isSpecification="false" xmi.id="6hTud2dSJChA" type="BWQJ4VEIPGAq" value="" name="element"/> + </UML:BehavioralFeature.parameter> + </UML:Operation> + <UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="FscIGPOK4rCh" name="saveToXMI"> + <UML:BehavioralFeature.parameter> + <UML:Parameter visibility="private" isSpecification="false" xmi.id="sq8B0pJyPfHW" type="d82UIG7f8Y5w" value="" name="qDoc"/> + <UML:Parameter visibility="private" isSpecification="false" xmi.id="GLmJtiy8bbQp" type="BWQJ4VEIPGAq" value="" name="qElement"/> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="IPgsE6pvMDOS" xmi.id="poaSnVGpabWV" parent="NOCGzjiKUdGC" name=""/> </UML:Namespace.ownedElement> <XMI.extension xmi.extender="umbrello"> <diagrams resolution="88"> @@ -3314,6 +3362,7 @@ <datatypewidget width="142" showstereotype="1" x="57" usesdiagramusefillcolor="0" y="423" usesdiagramfillcolor="0" isinstance="0" localid="iHFxfHWr6QkP" fillcolor="#ffffc0" height="40" linecolor="#ff0000" xmi.id="NtM068hGxJZI" textcolor="#000000" usefillcolor="0" linewidth="0" font="Noto Sans,9,-1,0,50,0,0,0,0,0"/> <classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="0" showoperations="0" textcolor="#000000" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="1" x="57" showattsigs="601" showstereotype="1" y="336" showattributes="1" font="Noto Sans,9,-1,0,50,0,0,0,0,0" localid="wXMMs2R6OO6g" width="105" isinstance="0" usefillcolor="0" fillcolor="#ffffc0" xmi.id="7tNIitS1FZUG" showscope="1" height="19" showopsigs="601"/> <classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="0" showoperations="0" textcolor="#000000" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="1" x="123.975" showattsigs="601" showstereotype="1" y="1020.4" showattributes="1" font="Noto Sans,9,-1,0,50,0,0,0,0,0" localid="C7KITH1tDFPa" width="53" isinstance="0" usefillcolor="0" fillcolor="#ffffc0" xmi.id="uMl1DfCwnQtw" showscope="1" height="19" showopsigs="601"/> + <classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="0" showoperations="0" textcolor="#000000" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="1" x="2178.82" showattsigs="601" showstereotype="1" y="483.768" showattributes="1" font="Noto Sans,9,-1,0,50,0,0,0,0,0" localid="dy60dNWrhI8a" width="87" isinstance="0" usefillcolor="0" fillcolor="#ffffc0" xmi.id="IPgsE6pvMDOS" showscope="1" height="26" showopsigs="601"/> </widgets> <messages/> <associations> @@ -3355,7 +3404,7 @@ <endpoint endx="595" endy="931"/> </linepath> </assocwidget> - <assocwidget indexa="1" indexb="2" usesdiagramusefillcolor="0" widgetaid="MiNwPJtCBwbc" usesdiagramfillcolor="0" fillcolor="#ffff00" linecolor="#ff0000" seqnum="" totalcounta="2" xmi.id="lYX43ktrCwIU" widgetbid="Yc0BnEgp6uEQ" totalcountb="3" type="500" textcolor="none" usefillcolor="1" linewidth="0" font="Noto Sans,9,-1,0,50,0,0,0,0,0"> + <assocwidget indexa="1" indexb="1" usesdiagramusefillcolor="0" widgetaid="MiNwPJtCBwbc" usesdiagramfillcolor="0" fillcolor="#ffff00" linecolor="#ff0000" seqnum="" totalcounta="2" xmi.id="lYX43ktrCwIU" widgetbid="Yc0BnEgp6uEQ" totalcountb="2" type="500" textcolor="none" usefillcolor="1" linewidth="0" font="Noto Sans,9,-1,0,50,0,0,0,0,0"> <linepath layout="Polyline"> <startpoint startx="749" starty="542"/> <endpoint endx="595" endy="931"/> @@ -3502,6 +3551,12 @@ <endpoint endx="176.975" endy="1039.4"/> </linepath> </assocwidget> + <assocwidget indexa="1" indexb="1" usesdiagramusefillcolor="0" widgetaid="IPgsE6pvMDOS" usesdiagramfillcolor="0" fillcolor="#ffff00" linecolor="#ff0000" seqnum="" totalcounta="2" xmi.id="poaSnVGpabWV" widgetbid="NOCGzjiKUdGC" totalcountb="2" type="500" textcolor="none" usefillcolor="1" linewidth="0" font="Noto Sans,9,-1,0,50,0,0,0,0,0"> + <linepath layout="Polyline"> + <startpoint startx="2178.82" starty="483.768"/> + <endpoint endx="1778" endy="412"/> + </linepath> + </assocwidget> </associations> </diagram> <diagram showopsig="1" linecolor="#ff0000" snapx="25" showattribassocs="1" snapy="25" linewidth="0" showattsig="1" textcolor="#000000" isopen="1" showpackage="1" showpubliconly="0" showstereotype="1" name="UML parent handling" font="Sans Serif,9,-1,0,50,0,0,0,0,0" canvasheight="665" canvaswidth="726" localid="-1" snapcsgrid="0" showgrid="0" showops="1" griddotcolor="#d3d3d3" backgroundcolor="#ffffff" autoincrementsequence="0" usefillcolor="1" fillcolor="#ffffc0" zoom="100" xmi.id="3ZBjupRIc6iz" documentation="" showscope="1" snapgrid="0" showatts="1" type="3"> @@ -3587,6 +3642,7 @@ <UML:Artifact visibility="public" isSpecification="false" namespace="Component View" drawas="1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="KBNFUwXswPtn" comment="*************************************************************************
 *
 This program is free software; you can redistribute it and/or modify *
 it under the terms of the GNU General Public License as published by *
 the Free Software Foundation; either version 2 of the License, or *
 (at your option) any later version. *
 *
 copyright (C) 2004-2007 *
 Umbrello UML Modeller Authors <[email protected]> *
 *************************************************************************" name="umltemplatelist.h"/> <UML:Artifact visibility="public" isSpecification="false" namespace="Component View" drawas="1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="umf7IfVzVMkZ" comment="*************************************************************************
 This program is free software; you can redistribute it and/or modify *
 it under the terms of the GNU General Public License as published by *
 the Free Software Foundation; either version 2 of the License, or *
 (at your option) any later version. *
 *
 copyright (C) 2002-2014 *
 Umbrello UML Modeller Authors <[email protected]> *
 *************************************************************************" name="uniqueconstraint.h"/> <UML:Artifact visibility="public" isSpecification="false" namespace="Component View" drawas="1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Bfsi2w2k0p6Y" comment="*************************************************************************
 This program is free software; you can redistribute it and/or modify *
 it under the terms of the GNU General Public License as published by *
 the Free Software Foundation; either version 2 of the License, or *
 (at your option) any later version. *
 *
 copyright (C) 2002-2014 *
 Umbrello UML Modeller Authors <[email protected]> *
 *************************************************************************" name="usecase.h"/> + <UML:Artifact visibility="public" isSpecification="false" namespace="Component View" drawas="1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="45Ngwft2vOVk" comment="*************************************************************************
 This program is free software; you can redistribute it and/or modify *
 it under the terms of the GNU General Public License as published by *
 the Free Software Foundation; either version 2 of the License, or *
 (at your option) any later version. *
 *
 copyright (C) 2003-2016 *
 Umbrello UML Modeller Authors <[email protected]> *
 *************************************************************************" name="datatype.h"/> </UML:Namespace.ownedElement> </UML:Model> <UML:Model visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Deployment View" name="Deployment View"> @@ -3599,7 +3655,7 @@ </UML:Model> </XMI.content> <XMI.extensions xmi.extender="umbrello"> - <docsettings viewid="3ZBjupRIc6iz" uniqueid="stisR61Kuw0A" documentation=""/> + <docsettings viewid="TGcjrcWrBVaN" uniqueid="dy60dNWrhI8a" documentation=""/> <listview> <listitem open="1" type="800" id="Views"> <listitem open="1" type="802" id="Use Case View"/> @@ -3614,6 +3670,7 @@ <listitem open="0" type="824" id="AYkCWatmubZS"/> <listitem open="0" type="824" id="gKM4dS7LnwJE"/> <listitem open="0" type="824" id="KxrHx68I0q2j"/> + <listitem open="0" type="824" id="45Ngwft2vOVk"/> <listitem open="0" type="824" id="MwIvVnuQ6wb3"/> <listitem open="0" type="824" id="asKmUMoU376N"/> <listitem open="0" type="824" id="2IE3wxcoF0Vw"/> @@ -3785,13 +3842,13 @@ <listitem open="0" type="813" id="7CMamDdSMZqv"> <listitem open="0" type="813" id="evBABG9k36En"/> </listitem> - <listitem open="0" type="813" id="IMIJw0bGwz97"> + <listitem open="1" type="813" id="IMIJw0bGwz97"> <listitem open="0" type="813" id="276qIb5XWJkC"/> </listitem> <listitem open="0" type="813" id="RlsO2dtrrLHP"> <listitem open="0" type="813" id="a7KusyjitTKG"/> </listitem> - <listitem open="0" type="813" id="hNcnJA4NvA3o"> + <listitem open="1" type="813" id="hNcnJA4NvA3o"> <listitem open="0" type="813" id="5S6muohkOTCO"/> </listitem> <listitem open="0" type="813" id="HhSgiZswOAfN"> @@ -4055,7 +4112,7 @@ <listitem open="0" type="815" id="1vNRp6bIW2d8"/> <listitem open="0" type="815" id="GTcJ0Wj9d7GL"/> </listitem> - <listitem open="0" type="813" id="atDLKcH70N77"> + <listitem open="1" type="813" id="atDLKcH70N77"> <listitem open="0" type="815" id="EgFiJveikOZY"/> <listitem open="0" type="815" id="OvsevRjnjVhh"/> <listitem open="0" type="815" id="lInEtv07I2Z5"/> @@ -4074,6 +4131,17 @@ <listitem open="0" type="815" id="XApeAYMIruWL"/> <listitem open="0" type="815" id="h9ZA3eY5rF5s"/> </listitem> + <listitem open="0" type="813" id="IPgsE6pvMDOS"> + <listitem open="0" type="815" id="dSuoSDjTOit5"/> + <listitem open="0" type="815" id="GMRt5ivLqxbj"/> + <listitem open="0" type="815" id="BTVffiwv2No8"/> + <listitem open="0" type="814" id="yo92eJiU9of8"/> + <listitem open="0" type="815" id="zZvMHmRtin6A"/> + <listitem open="0" type="815" id="FscIGPOK4rCh"/> + <listitem open="0" type="815" id="IA4FuuhsRaCi"/> + <listitem open="0" type="815" id="cwOFTblu9z1e"/> + <listitem open="0" type="815" id="TPI1ymWBB2Jx"/> + </listitem> <listitem open="0" type="813" id="juoqWYRuBROj"> <listitem open="0" type="815" id="bv26mP55yIhW"/> <listitem open="0" type="815" id="YQ6GupXlijdK"/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/CMakeLists.txt new/umbrello-16.12.1/umbrello/CMakeLists.txt --- old/umbrello-16.12.0/umbrello/CMakeLists.txt 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/CMakeLists.txt 2017-01-09 20:11:13.000000000 +0100 @@ -563,7 +563,7 @@ ${CMAKE_CURRENT_SOURCE_DIR}/pics/global/hi128-apps-umbrello.png ) add_executable(umbrello ${umbrello_SRCS}) - target_link_libraries(umbrello libumbrello) + target_link_libraries(umbrello libumbrello KF5::WindowSystem) endif() if(LIB_BUILD_MODE EQUAL SHARED) install(TARGETS libumbrello ${INSTALL_TARGETS_DEFAULT_ARGS} ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/cmds/widget/cmdcreatewidget.cpp new/umbrello-16.12.1/umbrello/cmds/widget/cmdcreatewidget.cpp --- old/umbrello-16.12.0/umbrello/cmds/widget/cmdcreatewidget.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/cmds/widget/cmdcreatewidget.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -53,8 +53,8 @@ // widget back from the saved XMI state. QDomElement widgetElement = m_element.firstChild().toElement(); umlWidget = scene()->loadWidgetFromXMI(widgetElement); - - addWidgetToScene(umlWidget); + if (umlWidget) + addWidgetToScene(umlWidget); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/codegenerators/ada/adawriter.cpp new/umbrello-16.12.1/umbrello/codegenerators/ada/adawriter.cpp --- old/umbrello-16.12.0/umbrello/codegenerators/ada/adawriter.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/codegenerators/ada/adawriter.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -712,7 +712,7 @@ if (forceSections() || atl.count()) { ada << indent() << "-- Attributes:" << m_endl; foreach (UMLAttribute* at, atl) { - if (at->isStatic()) + if (!at || at->isStatic()) continue; ada << indent() << cleanName(at->name()) << " : " << at->getTypeName(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/codegenerators/cpp/cppwriter.cpp new/umbrello-16.12.1/umbrello/codegenerators/cpp/cppwriter.cpp --- old/umbrello-16.12.0/umbrello/codegenerators/cpp/cppwriter.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/codegenerators/cpp/cppwriter.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -1123,6 +1123,7 @@ void CppWriter::writeDataTypes(UMLClassifier *c, Uml::Visibility::Enum permitScope, QTextStream &stream) { foreach (UMLObject* o, c->containedObjects()) { + uIgnoreZeroPointer(o); if (o->visibility() != permitScope) continue; if (!o->isUMLDatatype()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/codegenerators/tcl/tclwriter.cpp new/umbrello-16.12.1/umbrello/codegenerators/tcl/tclwriter.cpp --- old/umbrello-16.12.0/umbrello/codegenerators/tcl/tclwriter.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/codegenerators/tcl/tclwriter.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -413,11 +413,15 @@ // only use OTHER classes (e.g. we don't need to write includes for ourselves!! // AND only IF the roleName is defined, otherwise, it is not meant to be noticed. if (a->getObjectId(Uml::RoleType::A) == myId && !a->getRoleName(Uml::RoleType::B).isEmpty()) { - classifier = dynamic_cast < UMLClassifier * >(a->getObject(Uml::RoleType::B)); + classifier = a->getObject(Uml::RoleType::B)->asUMLClassifier(); + if (classifier == 0) + continue; writeUse(classifier); } else if (a->getObjectId(Uml::RoleType::B) == myId && !a->getRoleName(Uml::RoleType::A).isEmpty()) { - classifier = dynamic_cast < UMLClassifier * >(a->getObject(Uml::RoleType::A)); + classifier = a->getObject(Uml::RoleType::A)->asUMLClassifier(); + if (classifier == 0) + continue; if (classifier->package().isEmpty()) writeCode(QLatin1String("namespace eval ") + cleanName(classifier->name()) + QLatin1String(" {}")); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/codeimport/classimport.cpp new/umbrello-16.12.1/umbrello/codeimport/classimport.cpp --- old/umbrello-16.12.0/umbrello/codeimport/classimport.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/codeimport/classimport.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -88,6 +88,7 @@ uint processedFilesCount = 0; bool result = true; umldoc->setLoading(true); + umldoc->setImporting(true); foreach (const QString& fileName, fileNames) { umldoc->writeToStatusBar(i18n("Importing file: %1 Progress: %2/%3", fileName, processedFilesCount, fileNames.size())); @@ -96,6 +97,7 @@ processedFilesCount++; } umldoc->setLoading(false); + umldoc->setImporting(false); umldoc->writeToStatusBar(result ? i18nc("ready to status bar", "Ready.") : i18nc("failed to status bar", "Failed.")); return result; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/codeimport/import_utils.cpp new/umbrello-16.12.1/umbrello/codeimport/import_utils.cpp --- old/umbrello-16.12.0/umbrello/codeimport/import_utils.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/codeimport/import_utils.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -283,7 +283,7 @@ else uError() << "createUMLObject(" << name << "): " << "origType " << typeName << " is not a UMLClassifier"; - if (isRef || isPointer) + if (dt && (isRef || isPointer)) dt->setIsReference(); /* if (isPointer) { @@ -312,7 +312,7 @@ if (! strippedComment.isEmpty()) { o->setDoc(strippedComment); } - if (!stereotype.isEmpty()) { + if (o && !stereotype.isEmpty()) { o->setStereotype(stereotype); } if (gRelatedClassifier == 0 || gRelatedClassifier == o) @@ -512,7 +512,7 @@ const QString& name) { UMLClassifier *owner = method->umlParent()->asUMLClassifier(); - UMLObject *typeObj = owner->findTemplate(type); + UMLObject *typeObj = owner ? owner->findTemplate(type) : 0; if (typeObj == 0) { bPutAtGlobalScope = true; gRelatedClassifier = owner; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/codeimport/javaimport.cpp new/umbrello-16.12.1/umbrello/codeimport/javaimport.cpp --- old/umbrello-16.12.0/umbrello/codeimport/javaimport.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/codeimport/javaimport.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -18,6 +18,7 @@ #include "debug_utils.h" #include "enum.h" #include "import_utils.h" +#include "object_factory.h" #include "operation.h" #include "package.h" #include "uml.h" @@ -393,6 +394,22 @@ UMLObject *ns = Import_Utils::createUMLObject(UMLObject::ot_Enum, name, currentScope(), m_comment); UMLEnum *enumType = ns->asUMLEnum(); + // handle type mismatch + if (ns && enumType == 0) { + QString comment = ns->doc(); + QString stereotype = ns->stereotype(); + Uml::Visibility::Enum visibility = ns->visibility(); + UMLApp::app()->document()->removeUMLObject(ns, true); + ns = Object_Factory::createNewUMLObject(UMLObject::ot_Enum, name, currentScope(), false); + ns->setDoc(comment); + ns->setStereotypeCmd(stereotype.isEmpty() ? QLatin1String("enum") : stereotype); + ns->setVisibilityCmd(visibility); + // add to parents child list + if (!currentScope()->containedObjects().contains(ns)) + currentScope()->containedObjects().append(ns); + enumType = ns->asUMLEnum(); + } + skipStmt(QLatin1String("{")); while (m_srcIndex < srcLength - 1 && advance() != QLatin1String("}")) { Import_Utils::addEnumLiteral(enumType, m_source[m_srcIndex]); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/codeimport/pythonimport.cpp new/umbrello-16.12.1/umbrello/codeimport/pythonimport.cpp --- old/umbrello-16.12.0/umbrello/codeimport/pythonimport.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/codeimport/pythonimport.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -313,8 +313,15 @@ m_comment = QString(); } - const QString& name = advance(); - // operation + QString name = advance(); + Uml::Visibility::Enum visibility = Uml::Visibility::Public; + if (name.startsWith(QLatin1String("__"))) { + name = name.mid(2); + visibility = Uml::Visibility::Private; + } else if (name.startsWith(QLatin1String("_"))) { + name = name.mid(1); + visibility = Uml::Visibility::Protected; + } UMLOperation *op = Import_Utils::makeOperation(m_klass, name); if (advance() != QLatin1String("(")) { uError() << "importPython def " << name << ": expecting \"(\""; @@ -336,7 +343,7 @@ if (advance() != QLatin1String(",")) break; } - Import_Utils::insertMethod(m_klass, op, Uml::Visibility::Public, QLatin1String("string"), + Import_Utils::insertMethod(m_klass, op, visibility, QLatin1String("string"), m_isStatic, false /*isAbstract*/, false /*isFriend*/, false /*isConstructor*/, m_comment); m_isStatic = false; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/debug/debug_utils.h new/umbrello-16.12.1/umbrello/debug/debug_utils.h --- old/umbrello-16.12.0/umbrello/debug/debug_utils.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/debug/debug_utils.h 2017-01-09 20:11:13.000000000 +0100 @@ -131,6 +131,25 @@ #define uIgnoreZeroPointer(a) if (!a) { uDebug() << "zero pointer detected" << __FILE__ << __LINE__; continue; } +/** + Check a pointer and return 0 if it is zero. + + This macros is implemented as asm code to prevent + removing by gcc optimizer for example in class methods + where 'this' pointer is attributed as "nonnull". + + @param p pointer to check + @return returns 0 is pointer is zero +*/ +#define uCheckPointerAndReturnIfZero(p) \ + asm goto ("test %0,%0; jne %l[next]" \ + : /* No outputs. */ \ + : "r"(p) \ + : \ + : next); \ + return 0; \ + next: + /** * In a Q_OBJECT class define any enum as Q_ENUMS. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/dialogs/umlattributedialog.cpp new/umbrello-16.12.1/umbrello/dialogs/umlattributedialog.cpp --- old/umbrello-16.12.0/umbrello/dialogs/umlattributedialog.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/dialogs/umlattributedialog.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -126,18 +126,18 @@ m_pNameLE->setText(m_pAttribute->name()); return false; } - m_pAttribute->setName(name); + m_pAttribute->blockSignals(true); m_visibilityEnumWidget->apply(); - - // Set the scope as the default in the option state - Settings::optionState().classState.defaultAttributeScope = m_pAttribute->visibility(); - m_pAttribute->setInitialValue(m_pInitialLE->text()); m_stereotypeWidget->apply(); m_pAttribute->setStatic(m_pStaticCB->isChecked()); - m_datatypeWidget->apply(); m_docWidget->apply(); + m_pAttribute->blockSignals(false); + // trigger signals + m_pAttribute->setName(name); + // Set the scope as the default in the option state + Settings::optionState().classState.defaultAttributeScope = m_pAttribute->visibility(); return true; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/layoutgenerator.cpp new/umbrello-16.12.1/umbrello/layoutgenerator.cpp --- old/umbrello-16.12.0/umbrello/layoutgenerator.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/layoutgenerator.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -294,7 +294,14 @@ { QString diagramType = Uml::DiagramType::toString(scene->type()).toLower(); #if QT_VERSION >= 0x050000 - QStringList fileNames = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QString::fromLatin1("umbrello/layouts/%1*.desktop").arg(diagramType)); + const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("umbrello/layouts"), QStandardPaths::LocateDirectory); + QStringList fileNames; + foreach(const QString& dir, dirs) { + const QStringList entries = QDir(dir).entryList(QStringList() << QString::fromLatin1("%1*.desktop").arg(diagramType)); + foreach(const QString& file, entries) { + fileNames.append(dir + QLatin1Char('/') + file); + } + } #else KStandardDirs dirs; QStringList fileNames = dirs.findAllResources("data", QString::fromLatin1("umbrello/layouts/%1*.desktop").arg(diagramType)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/listpopupmenu.cpp new/umbrello-16.12.1/umbrello/listpopupmenu.cpp --- old/umbrello-16.12.0/umbrello/listpopupmenu.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/listpopupmenu.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -419,9 +419,12 @@ } case WidgetBase::wt_Class: case WidgetBase::wt_Interface: - makeClassifierPopup(static_cast<ClassifierWidget*>(object)); + { + ClassifierWidget* classifier = object->asClassifierWidget(); + if (classifier) + makeClassifierPopup(classifier); + } break; - case WidgetBase::wt_Enum: insertSubMenuNew(mt_Enum); insertSubMenuColor(object->useFillColor()); @@ -1050,6 +1053,7 @@ insert(mt_Delete); switch(mt) { + case mt_AttributeAssociation: case mt_FullAssociation: insert(mt_Rename_Name, i18n("Change Association Name...")); insert(mt_Rename_RoleAName, i18n("Change Role A Name...")); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/model_utils.cpp new/umbrello-16.12.1/umbrello/model_utils.cpp --- old/umbrello-16.12.0/umbrello/model_utils.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/model_utils.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -859,7 +859,7 @@ QString retType = pat.cap(1); retType = retType.trimmed(); if (retType != QLatin1String("void")) { - UMLObject *pRetType = owningScope->findTemplate(retType); + UMLObject *pRetType = owningScope ? owningScope->findTemplate(retType) : 0; if (pRetType == 0) { pRetType = pDoc->findUMLObject(retType, UMLObject::ot_UMLObject, owningScope); if (pRetType == 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umldoc.cpp new/umbrello-16.12.1/umbrello/umldoc.cpp --- old/umbrello-16.12.0/umbrello/umldoc.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umldoc.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -113,6 +113,7 @@ #endif m_pChangeLog(0), m_bLoading(false), + m_importing(false), m_Doc(QString()), m_pAutoSaveTimer(0), m_nViewID(Uml::ID::None), @@ -1519,6 +1520,23 @@ } /** + * Returns true when importing file(s). + * @return the value of the flag + */ +bool UMLDoc::importing() const +{ + return m_importing; +} +/** + * Sets importing boolean flag to the value given. + * @param state value to set + */ +void UMLDoc::setImporting(bool state /* = true */) +{ + m_importing = state; +} + +/** * Returns the m_bClosing flag. * @return the value of the flag */ @@ -1819,7 +1837,7 @@ return 0; } UMLFolder *f = currentView->umlScene()->folder(); - while (f->umlPackage()) { + while (f && f->umlPackage()) { f = f->umlParent()->asUMLFolder(); } return f; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umldoc.h new/umbrello-16.12.1/umbrello/umldoc.h --- old/umbrello-16.12.0/umbrello/umldoc.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umldoc.h 2017-01-09 20:11:13.000000000 +0100 @@ -222,6 +222,9 @@ bool loading() const; void setLoading(bool state = true); + bool importing() const; + void setImporting(bool state = true); + bool closing() const; void addDefaultDatatypes(); @@ -290,6 +293,11 @@ bool m_bLoading; /** + * true if the we're importing + */ + bool m_importing; + + /** * Documentation for the project. */ QString m_Doc; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umllistview.cpp new/umbrello-16.12.1/umbrello/umllistview.cpp --- old/umbrello-16.12.0/umbrello/umllistview.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umllistview.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -1201,7 +1201,7 @@ */ void UMLListView::slotObjectRemoved(UMLObject* object) { - if (m_doc->loading()) { //needed for class wizard + if (m_doc->loading() && !m_doc->importing()) { //needed for class wizard but not when importing return; } disconnect(object, SIGNAL(modified()), this, SLOT(slotObjectChanged())); @@ -2244,7 +2244,7 @@ // the parent entity) if (type == UMLListViewItem::lvt_PrimaryKeyConstraint) { UMLUniqueConstraint* uuc = object->asUMLUniqueConstraint(); - UMLEntity* ent = uuc->umlParent()->asUMLEntity(); + UMLEntity* ent = uuc ? uuc->umlParent()->asUMLEntity() : 0; if (ent) { ent->setAsPrimaryKey(uuc); } @@ -2517,7 +2517,8 @@ DEBUG(DBG_SRC) << "Loaded <listview> entry does not match uml model" << item->text(0) << " parent " << parent->text(0) << " (" << parent << ") != " - << itmParent->text(0) << " (" << itmParent << ")"; + << (itmParent ? itmParent->text(0) : QLatin1String("")) + << " (" << itmParent << ")"; } break; case UMLListViewItem::lvt_Attribute: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umllistviewitem.cpp new/umbrello-16.12.1/umbrello/umllistviewitem.cpp --- old/umbrello-16.12.0/umbrello/umllistviewitem.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umllistviewitem.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -510,7 +510,7 @@ return; } UMLOperation *op = m_object->asUMLOperation(); - UMLClassifier *parent = op->umlParent()->asUMLClassifier(); + UMLClassifier *parent = op ? op->umlParent()->asUMLClassifier() : 0; Model_Utils::OpDescriptor od; Model_Utils::Parse_Status st = Model_Utils::parseOperation(newText, od, parent); if (st == Model_Utils::PS_OK) { @@ -566,7 +566,7 @@ Model_Utils::Parse_Status st; st = Model_Utils::parseAttribute(newText, nt, parent, &vis); if (st == Model_Utils::PS_OK) { - UMLObject *exists = parent->findChildObject(newText); + UMLObject *exists = parent ? parent->findChildObject(newText) : 0; if (exists) { cancelRenameWithMsg(); return; @@ -627,7 +627,7 @@ Model_Utils::NameAndType nt; Model_Utils::Parse_Status st = Model_Utils::parseTemplate(newText, nt, parent); if (st == Model_Utils::PS_OK) { - UMLObject *exists = parent->findChildObject(newText); + UMLObject *exists = parent ? parent->findChildObject(newText) : 0; if (exists) { cancelRenameWithMsg(); return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/attribute.cpp new/umbrello-16.12.1/umbrello/umlmodel/attribute.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/attribute.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/attribute.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -130,7 +130,7 @@ * @param sig If true will show the attribute type and initial value. * @return Returns a string representation of the UMLAttribute. */ -QString UMLAttribute::toString(Uml::SignatureType::Enum sig) +QString UMLAttribute::toString(Uml::SignatureType::Enum sig, bool withStereotype) { QString s; @@ -172,6 +172,11 @@ QString string = s + name() + QLatin1String(" : ") + typeName; if (m_InitialValue.length() > 0) string += QLatin1String(" = ") + m_InitialValue; + if (withStereotype) { + QString st = stereotype(true); + if (!st.isEmpty()) + string += QLatin1Char(' ') + st; + } return string; } return s + name(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/attribute.h new/umbrello-16.12.1/umbrello/umlmodel/attribute.h --- old/umbrello-16.12.0/umbrello/umlmodel/attribute.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/attribute.h 2017-01-09 20:11:13.000000000 +0100 @@ -50,7 +50,7 @@ QString getInitialValue() const; void setInitialValue(const QString &iv); - QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig); + QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig, bool withStereotype=false); QString getFullyQualifiedName(const QString& separator = QString(), bool includeRoot = false) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/checkconstraint.cpp new/umbrello-16.12.1/umbrello/umlmodel/checkconstraint.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/checkconstraint.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/checkconstraint.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -93,8 +93,9 @@ * @param sig If true will show the attribute type and initial value. * @return Returns a string representation of the UMLAttribute. */ -QString UMLCheckConstraint::toString(Uml::SignatureType::Enum sig) +QString UMLCheckConstraint::toString(Uml::SignatureType::Enum sig, bool withStereotype) { + Q_UNUSED(withStereotype); QString s; if (sig == Uml::SignatureType::ShowSig || sig == Uml::SignatureType::SigNoVis) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/checkconstraint.h new/umbrello-16.12.1/umbrello/umlmodel/checkconstraint.h --- old/umbrello-16.12.0/umbrello/umlmodel/checkconstraint.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/checkconstraint.h 2017-01-09 20:11:13.000000000 +0100 @@ -39,7 +39,7 @@ virtual UMLObject* clone() const; - QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig); + QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig, bool withStereotype=false); QString getFullyQualifiedName(const QString& separator = QString(), bool includeRoot = false) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/classifier.cpp new/umbrello-16.12.1/umbrello/umlmodel/classifier.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/classifier.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/classifier.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -1342,7 +1342,7 @@ bool found = false; //make sure that an attribute with the same name doesn't already exist foreach (UMLAttribute *at, atl) { - uIgnoreZeroPointer(a); + uIgnoreZeroPointer(at); if (at->name() == roleNameB) { found = true; break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/classifierlistitem.cpp new/umbrello-16.12.1/umbrello/umlmodel/classifierlistitem.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/classifierlistitem.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/classifierlistitem.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -87,9 +87,10 @@ * @param sig What type of operation string to show. * @return The string representation of the operation. */ -QString UMLClassifierListItem::toString(Uml::SignatureType::Enum sig) +QString UMLClassifierListItem::toString(Uml::SignatureType::Enum sig, bool withStereotype) { Q_UNUSED(sig); + Q_UNUSED(withStereotype); return name(); } @@ -100,7 +101,7 @@ */ UMLClassifier * UMLClassifierListItem::getType() const { - return m_pSecondary->asUMLClassifier(); + return m_pSecondary ? m_pSecondary->asUMLClassifier() : 0; } /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/classifierlistitem.h new/umbrello-16.12.1/umbrello/umlmodel/classifierlistitem.h --- old/umbrello-16.12.0/umbrello/umlmodel/classifierlistitem.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/classifierlistitem.h 2017-01-09 20:11:13.000000000 +0100 @@ -43,7 +43,7 @@ void setTypeName(const QString &type); virtual QString getTypeName() const; - virtual QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig); + virtual QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig, bool withStereotype=false); virtual void copyInto(UMLObject *lhs) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/entity.cpp new/umbrello-16.12.1/umbrello/umlmodel/entity.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/entity.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/entity.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -524,7 +524,8 @@ } // check if this constraint already exists as a unique constraint for this entity - UMLUniqueConstraint* uuc = findChildObjectById(uconstr->id())->asUMLUniqueConstraint(); + UMLObject *o = findChildObjectById(uconstr->id()); + UMLUniqueConstraint* uuc = o ? o->asUMLUniqueConstraint() : 0; if (uuc == 0) { addConstraint(uconstr); uuc = uconstr; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/entityattribute.cpp new/umbrello-16.12.1/umbrello/umlmodel/entityattribute.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/entityattribute.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/entityattribute.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -166,8 +166,9 @@ * @param sig If true will show the entityattribute type and initial value. * @return Returns a string representation of the UMLEntityAttribute. */ -QString UMLEntityAttribute::toString(Uml::SignatureType::Enum sig) +QString UMLEntityAttribute::toString(Uml::SignatureType::Enum sig, bool withStereotype) { + Q_UNUSED(withStereotype); QString s; //FIXME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/entityattribute.h new/umbrello-16.12.1/umbrello/umlmodel/entityattribute.h --- old/umbrello-16.12.0/umbrello/umlmodel/entityattribute.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/entityattribute.h 2017-01-09 20:11:13.000000000 +0100 @@ -63,7 +63,7 @@ void setNull(const bool null); bool getNull() const; - QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig); + QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig, bool withStereotype=false); virtual void saveToXMI(QDomDocument& qDoc, QDomElement& qElement); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/enumliteral.cpp new/umbrello-16.12.1/umbrello/umlmodel/enumliteral.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/enumliteral.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/enumliteral.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -84,10 +84,11 @@ * @param sig If true will show the attribute type and value. * @return Returns a string representation of the UMLEnumLiteral. */ -QString UMLEnumLiteral::toString(Uml::SignatureType::Enum sig) +QString UMLEnumLiteral::toString(Uml::SignatureType::Enum sig, bool withStereotype) { QString s; Q_UNUSED(sig); + Q_UNUSED(withStereotype); s = name(); if (m_Value.length() > 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/enumliteral.h new/umbrello-16.12.1/umbrello/umlmodel/enumliteral.h --- old/umbrello-16.12.0/umbrello/umlmodel/enumliteral.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/enumliteral.h 2017-01-09 20:11:13.000000000 +0100 @@ -41,7 +41,7 @@ QString value() const; void setValue(const QString &v); - QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig); + QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig, bool withStereotype=false); virtual void saveToXMI(QDomDocument& qDoc, QDomElement& qElement); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/foreignkeyconstraint.cpp new/umbrello-16.12.1/umbrello/umlmodel/foreignkeyconstraint.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/foreignkeyconstraint.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/foreignkeyconstraint.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -118,8 +118,9 @@ * @param sig If true will show the attribute type and initial value. * @return Returns a string representation of the UMLAttribute. */ -QString UMLForeignKeyConstraint::toString(Uml::SignatureType::Enum sig) +QString UMLForeignKeyConstraint::toString(Uml::SignatureType::Enum sig, bool withStereotype) { + Q_UNUSED(withStereotype); QString s; if (sig == Uml::SignatureType::ShowSig || sig == Uml::SignatureType::SigNoVis) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/foreignkeyconstraint.h new/umbrello-16.12.1/umbrello/umlmodel/foreignkeyconstraint.h --- old/umbrello-16.12.0/umbrello/umlmodel/foreignkeyconstraint.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/foreignkeyconstraint.h 2017-01-09 20:11:13.000000000 +0100 @@ -57,7 +57,7 @@ virtual UMLObject* clone() const; - QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig); + QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig, bool withStereotype=false); void setReferencedEntity(UMLEntity* ent); UMLEntity* getReferencedEntity() const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/operation.cpp new/umbrello-16.12.1/umbrello/umlmodel/operation.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/operation.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/operation.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -196,7 +196,7 @@ * @param sig what type of operation string to show * @return the string representation of the operation */ -QString UMLOperation::toString(Uml::SignatureType::Enum sig) +QString UMLOperation::toString(Uml::SignatureType::Enum sig, bool withStereotype) { QString s; @@ -211,6 +211,11 @@ if (sig == Uml::SignatureType::NoSig || sig == Uml::SignatureType::NoSigNoVis) { if (parameterlessOpNeedsParentheses) s.append(QLatin1String("()")); + if (withStereotype) { + QString st = stereotype(true); + if (!st.isEmpty()) + s += QLatin1Char(' ') + st; + } return s; } int last = m_List.count(); @@ -219,7 +224,7 @@ int i = 0; foreach (UMLAttribute *param, m_List) { i++; - s.append(param->toString(Uml::SignatureType::SigNoVis)); + s.append(param->toString(Uml::SignatureType::SigNoVis, withStereotype)); if (i < last) s.append(QLatin1String(", ")); } @@ -246,6 +251,11 @@ s += returnType; } } + if (withStereotype) { + QString st = stereotype(true); + if (!st.isEmpty()) + s += QLatin1Char(' ') + st; + } return s; } @@ -358,6 +368,8 @@ return true; UMLClassifier * c = umlParent()->asUMLClassifier(); + if (!c) + return false; QString cName = c->name(); QString opName = name(); // It's a constructor operation if the operation name @@ -375,7 +387,8 @@ if (stereotype() == QLatin1String("destructor")) return true; UMLClassifier * c = umlParent()->asUMLClassifier(); - + if (!c) + return false; QString cName = c->name(); QString opName = name(); // Special support for C++ syntax: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/operation.h new/umbrello-16.12.1/umbrello/umlmodel/operation.h --- old/umbrello-16.12.0/umbrello/umlmodel/operation.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/operation.h 2017-01-09 20:11:13.000000000 +0100 @@ -49,7 +49,7 @@ UMLAttribute * findParm(const QString &name); - QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig); + QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig, bool withStereotype=false); void addParm(UMLAttribute *parameter, int position = -1); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/template.cpp new/umbrello-16.12.1/umbrello/umlmodel/template.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/template.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/template.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -51,14 +51,22 @@ { } -QString UMLTemplate::toString(Uml::SignatureType::Enum sig) +QString UMLTemplate::toString(Uml::SignatureType::Enum sig, bool withStereotype) { Q_UNUSED(sig); + QString s; + if (m_pSecondary == 0 || m_pSecondary->name() == QLatin1String("class")) { - return name(); + s = name(); } else { - return name() + QLatin1String(" : ") + m_pSecondary->name(); + s = name() + QLatin1String(" : ") + m_pSecondary->name(); + } + if (withStereotype) { + QString st = stereotype(true); + if (!st.isEmpty()) + s += QLatin1String(" ") + st; } + return s; } /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/template.h new/umbrello-16.12.1/umbrello/umlmodel/template.h --- old/umbrello-16.12.0/umbrello/umlmodel/template.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/template.h 2017-01-09 20:11:13.000000000 +0100 @@ -40,7 +40,7 @@ virtual ~UMLTemplate(); - QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig); + QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig, bool withStereotype=false); virtual QString getTypeName() const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/umlobject.cpp new/umbrello-16.12.1/umbrello/umlmodel/umlobject.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/umlobject.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/umlobject.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -669,6 +669,7 @@ */ UMLObject *UMLObject::umlParent() const { + uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLObject *>(parent()); } @@ -1226,32 +1227,33 @@ #include "uniqueconstraint.h" #include "usecase.h" -UMLActor* UMLObject::asUMLActor() {return dynamic_cast<UMLActor*>(this); } -UMLArtifact* UMLObject::asUMLArtifact() { return dynamic_cast<UMLArtifact*>(this); } -UMLAssociation* UMLObject::asUMLAssociation() { return dynamic_cast<UMLAssociation*>(this); } -UMLAttribute* UMLObject::asUMLAttribute() { return dynamic_cast<UMLAttribute*>(this); } -UMLCanvasObject* UMLObject::asUMLCanvasObject() { return dynamic_cast<UMLCanvasObject*>(this); } -UMLCategory* UMLObject::asUMLCategory() { return dynamic_cast<UMLCategory*>(this); } -UMLCheckConstraint* UMLObject::asUMLCheckConstraint() { return dynamic_cast<UMLCheckConstraint*>(this); } -UMLClassifier* UMLObject::asUMLClassifier() { return dynamic_cast<UMLClassifier*>(this); } -UMLClassifierListItem *UMLObject::asUMLClassifierListItem() { return dynamic_cast<UMLClassifierListItem*>(this); } -UMLComponent* UMLObject::asUMLComponent() { return dynamic_cast<UMLComponent*>(this); } -UMLDatatype *UMLObject::asUMLDatatype() { return dynamic_cast<UMLDatatype*>(this); } -UMLEntity* UMLObject::asUMLEntity() { return dynamic_cast<UMLEntity*>(this); } -UMLEntityAttribute* UMLObject::asUMLEntityAttribute() { return dynamic_cast<UMLEntityAttribute*>(this); } -UMLEntityConstraint* UMLObject::asUMLEntityConstraint() { return dynamic_cast<UMLEntityConstraint*>(this); } -UMLEnum* UMLObject::asUMLEnum() { return dynamic_cast<UMLEnum*>(this); } -UMLEnumLiteral* UMLObject::asUMLEnumLiteral() { return dynamic_cast<UMLEnumLiteral*>(this); } -UMLFolder* UMLObject::asUMLFolder() { return dynamic_cast<UMLFolder*>(this); } -UMLForeignKeyConstraint* UMLObject::asUMLForeignKeyConstraint() { return dynamic_cast<UMLForeignKeyConstraint*>(this); } -UMLNode* UMLObject::asUMLNode() { return dynamic_cast<UMLNode*>(this); } -UMLObject* UMLObject::asUMLObject() { return dynamic_cast<UMLObject*>(this); } -UMLOperation* UMLObject::asUMLOperation() { return dynamic_cast<UMLOperation*>(this); } -UMLPackage* UMLObject::asUMLPackage() { return dynamic_cast<UMLPackage*>(this); } -UMLPort* UMLObject::asUMLPort() { return dynamic_cast<UMLPort*>(this); } -UMLRole* UMLObject::asUMLRole() { return dynamic_cast<UMLRole*>(this); } -UMLStereotype* UMLObject::asUMLStereotype() { return dynamic_cast<UMLStereotype*>(this); } -UMLTemplate* UMLObject::asUMLTemplate() { return dynamic_cast<UMLTemplate*>(this); } -UMLUniqueConstraint* UMLObject::asUMLUniqueConstraint() { return dynamic_cast<UMLUniqueConstraint*>(this); } -UMLUseCase* UMLObject::asUMLUseCase() { return dynamic_cast<UMLUseCase*>(this); } + +UMLActor* UMLObject::asUMLActor() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLActor*>(this); } +UMLArtifact* UMLObject::asUMLArtifact() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLArtifact*>(this); } +UMLAssociation* UMLObject::asUMLAssociation() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLAssociation*>(this); } +UMLAttribute* UMLObject::asUMLAttribute() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLAttribute*>(this); } +UMLCanvasObject* UMLObject::asUMLCanvasObject() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLCanvasObject*>(this); } +UMLCategory* UMLObject::asUMLCategory() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLCategory*>(this); } +UMLCheckConstraint* UMLObject::asUMLCheckConstraint() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLCheckConstraint*>(this); } +UMLClassifier* UMLObject::asUMLClassifier() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLClassifier*>(this); } +UMLClassifierListItem *UMLObject::asUMLClassifierListItem() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLClassifierListItem*>(this); } +UMLComponent* UMLObject::asUMLComponent() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLComponent*>(this); } +UMLDatatype *UMLObject::asUMLDatatype() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLDatatype*>(this); } +UMLEntity* UMLObject::asUMLEntity() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLEntity*>(this); } +UMLEntityAttribute* UMLObject::asUMLEntityAttribute() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLEntityAttribute*>(this); } +UMLEntityConstraint* UMLObject::asUMLEntityConstraint() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLEntityConstraint*>(this); } +UMLEnum* UMLObject::asUMLEnum() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLEnum*>(this); } +UMLEnumLiteral* UMLObject::asUMLEnumLiteral() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLEnumLiteral*>(this); } +UMLFolder* UMLObject::asUMLFolder() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLFolder*>(this); } +UMLForeignKeyConstraint* UMLObject::asUMLForeignKeyConstraint() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLForeignKeyConstraint*>(this); } +UMLNode* UMLObject::asUMLNode() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLNode*>(this); } +UMLObject* UMLObject::asUMLObject() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLObject*>(this); } +UMLOperation* UMLObject::asUMLOperation() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLOperation*>(this); } +UMLPackage* UMLObject::asUMLPackage() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLPackage*>(this); } +UMLPort* UMLObject::asUMLPort() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLPort*>(this); } +UMLRole* UMLObject::asUMLRole() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLRole*>(this); } +UMLStereotype* UMLObject::asUMLStereotype() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLStereotype*>(this); } +UMLTemplate* UMLObject::asUMLTemplate() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLTemplate*>(this); } +UMLUniqueConstraint* UMLObject::asUMLUniqueConstraint() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLUniqueConstraint*>(this); } +UMLUseCase* UMLObject::asUMLUseCase() { uCheckPointerAndReturnIfZero(this); return dynamic_cast<UMLUseCase*>(this); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/uniqueconstraint.cpp new/umbrello-16.12.1/umbrello/umlmodel/uniqueconstraint.cpp --- old/umbrello-16.12.0/umbrello/umlmodel/uniqueconstraint.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/uniqueconstraint.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -109,9 +109,10 @@ * @param sig If true will show the attribute type and initial value. * @return Returns a string representation of the UMLAttribute. */ -QString UMLUniqueConstraint::toString(Uml::SignatureType::Enum sig) +QString UMLUniqueConstraint::toString(Uml::SignatureType::Enum sig, bool withStereotype) { - QString s; + Q_UNUSED(withStereotype); + QString s; if (sig == Uml::SignatureType::ShowSig || sig == Uml::SignatureType::SigNoVis) { s = name() + QLatin1Char(':'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlmodel/uniqueconstraint.h new/umbrello-16.12.1/umbrello/umlmodel/uniqueconstraint.h --- old/umbrello-16.12.0/umbrello/umlmodel/uniqueconstraint.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlmodel/uniqueconstraint.h 2017-01-09 20:11:13.000000000 +0100 @@ -40,7 +40,7 @@ virtual UMLObject* clone() const; - QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig); + QString toString(Uml::SignatureType::Enum sig = Uml::SignatureType::NoSig, bool withStereotype=false); QString getFullyQualifiedName(const QString& separator = QString(), bool includeRoot = false) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlscene.cpp new/umbrello-16.12.1/umbrello/umlscene.cpp --- old/umbrello-16.12.0/umbrello/umlscene.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlscene.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -2460,7 +2460,7 @@ // if the underlying model object is really a UMLClassifier then if (tmpUmlObj->isUMLDatatype()) { UMLDatatype *dt = tmpUmlObj->asUMLDatatype(); - while (dt->originType() != 0) { + while (dt && dt->originType() != 0) { tmpUmlObj = dt->originType(); if (!tmpUmlObj->isUMLDatatype()) break; @@ -2527,7 +2527,7 @@ if (type->isUMLDatatype()) { UMLDatatype *dt = type->asUMLDatatype(); // if the Datatype is a reference (pointer) type - if (dt->isReference()) { + if (dt && dt->isReference()) { //Uml::AssociationType::Enum assocType = Uml::AssociationType::Composition; UMLClassifier *c = dt->originType(); UMLWidget *w = c ? findWidget(c->id()) : 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlwidgets/associationwidget.cpp new/umbrello-16.12.1/umbrello/umlwidgets/associationwidget.cpp --- old/umbrello-16.12.0/umbrello/umlwidgets/associationwidget.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlwidgets/associationwidget.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -448,26 +448,6 @@ UMLApp::app()->docWindow()->updateDocumentation(); QPointer<AssociationPropertiesDialog> dlg = new AssociationPropertiesDialog(static_cast<QWidget*>(m_scene->activeView()), this); if (dlg->exec()) { - //rules built into these functions to stop updating incorrect values - setName(name()); - - setRoleName(roleName(RoleType::A), RoleType::A); - setRoleName(roleName(RoleType::B), RoleType::B); - - setDocumentation(documentation()); - - setRoleDocumentation(roleDocumentation(RoleType::A), RoleType::A); - setRoleDocumentation(roleDocumentation(RoleType::B), RoleType::B); - - setMultiplicity(multiplicity(RoleType::A), RoleType::A); - setMultiplicity(multiplicity(RoleType::B), RoleType::B); - - setVisibility(visibility(RoleType::A), RoleType::A); - setVisibility(visibility(RoleType::B), RoleType::B); - - setChangeability(changeability(RoleType::A), RoleType::A); - setChangeability(changeability(RoleType::B), RoleType::B); - UMLApp::app()->docWindow()->showDocumentation(this, true); } delete dlg; @@ -1131,16 +1111,21 @@ */ void AssociationWidget::setVisibility(Visibility::Enum value, Uml::RoleType::Enum role) { - if (value == visibility(role)) { - return; - } - if (m_umlObject) { + if (value != visibility(role) && m_umlObject) { // update our model object const UMLObject::ObjectType ot = m_umlObject->baseType(); - if (ot == UMLObject::ot_Association) - association()->setVisibility(value, role); - else if (ot == UMLObject::ot_Attribute) - attribute()->setVisibility(value); + if (ot == UMLObject::ot_Association) { + UMLAssociation *a = association(); + a->blockSignals(true); + a->setVisibility(value, role); + a->blockSignals(false); + } + else if (ot == UMLObject::ot_Attribute) { + UMLAttribute *a = attribute(); + a->blockSignals(true); + a->setVisibility(value); + a->blockSignals(false); + } } m_role[role].visibility = value; // update role pre-text attribute as appropriate diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlwidgets/classifierwidget.cpp new/umbrello-16.12.1/umbrello/umlwidgets/classifierwidget.cpp --- old/umbrello-16.12.0/umbrello/umlwidgets/classifierwidget.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlwidgets/classifierwidget.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -541,7 +541,7 @@ foreach (UMLClassifierListItem *a, list) { if (visualProperty(ShowPublicOnly) && a->visibility() != Uml::Visibility::Public) continue; - const int attWidth = fm.size(0, a->toString(m_attributeSignature)).width(); + const int attWidth = fm.size(0, a->toString(m_attributeSignature, visualProperty(ShowStereotype))).width(); if (attWidth > width) width = attWidth; } @@ -560,7 +560,7 @@ foreach (UMLOperation* op, list) { if (visualProperty(ShowPublicOnly) && op->visibility() != Uml::Visibility::Public) continue; - const QString displayedOp = op->toString(m_operationSignature); + const QString displayedOp = op->toString(m_operationSignature, visualProperty(ShowStereotype)); UMLWidget::FontType oft; oft = (op->isAbstract() ? UMLWidget::FT_ITALIC : UMLWidget::FT_NORMAL); const int w = UMLWidget::getFontMetrics(oft).size(0, displayedOp).width(); @@ -621,7 +621,7 @@ int height = count * fm.lineSpacing() + (MARGIN*2); foreach (UMLTemplate *t, list) { - int textWidth = fm.size(0, t->toString()).width(); + int textWidth = fm.size(0, t->toString(Uml::SignatureType::NoSig, visualProperty(ShowStereotype))).width(); if (textWidth > width) width = textWidth; } @@ -740,7 +740,7 @@ const int x = width() - templatesBoxSize.width() + MARGIN; int y = MARGIN; foreach (UMLTemplate *t, tlist) { - QString text = t->toString(); + QString text = t->toString(Uml::SignatureType::NoSig, visualProperty(ShowStereotype)); painter->drawText(x, y, fm.size(0, text).width(), fontHeight, Qt::AlignVCenter, text); y += fontHeight; } @@ -1034,7 +1034,7 @@ foreach (UMLClassifierListItem *obj, list) { if (visualProperty(ShowPublicOnly) && obj->visibility() != Uml::Visibility::Public) continue; - QString text = obj->toString(sigType); + QString text = obj->toString(sigType, visualProperty(ShowStereotype)); f.setItalic(obj->isAbstract()); f.setUnderline(obj->isStatic()); painter->setFont(f); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/umbrello/umlwidgets/umlwidget.cpp new/umbrello-16.12.1/umbrello/umlwidgets/umlwidget.cpp --- old/umbrello-16.12.0/umbrello/umlwidgets/umlwidget.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/umbrello/umlwidgets/umlwidget.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -584,6 +584,7 @@ } else { m_inMoveArea = false; } + m_startMove = false; } /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/unittests/CMakeLists.txt new/umbrello-16.12.1/unittests/CMakeLists.txt --- old/umbrello-16.12.0/unittests/CMakeLists.txt 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/unittests/CMakeLists.txt 2017-01-09 20:11:13.000000000 +0100 @@ -115,6 +115,9 @@ ecm_add_executable(testumlroledialog ${testumlroledialog_SRCS}) target_link_libraries(testumlroledialog ${LIBS}) +ecm_add_executable(testcrashhandler testcrashhandler.cpp) +target_link_libraries(testcrashhandler ${LIBS}) + find_package(LLVM CONFIG) find_package(CLANG QUIET) if(LLVM_FOUND) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/unittests/testbasictypes.cpp new/umbrello-16.12.1/unittests/testbasictypes.cpp --- old/umbrello-16.12.0/unittests/testbasictypes.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/unittests/testbasictypes.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -39,6 +39,16 @@ { }; +B* asB(A* p) +{ + return dynamic_cast<B*>(p); +} + +A* getPointer() +{ + return 0; +} + void TestBasicTypes::test_dynamic_cast() { QScopedPointer<A> a1(new A); @@ -47,6 +57,13 @@ QScopedPointer<A> a2(new B); B* b2 = dynamic_cast<B*> (a2.data()); QVERIFY(b2); + QScopedPointer<A> a3((B*)0); + B* b3 = dynamic_cast<B*> (a3.data()); + QVERIFY(!b3); + B* b4 = dynamic_cast<B*> (getPointer()); + QVERIFY(!b4); + B* b5 = asB(getPointer()); + QVERIFY(!b5); } void TestBasicTypes::test_QString_english() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/unittests/testcrashhandler.cpp new/umbrello-16.12.1/unittests/testcrashhandler.cpp --- old/umbrello-16.12.0/unittests/testcrashhandler.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/umbrello-16.12.1/unittests/testcrashhandler.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -0,0 +1,45 @@ +/* + Copyright 2016 Ralf Habacker <[email protected]> + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License or (at your option) version 3 or any later version + accepted by the membership of KDE e.V. (or its successor approved + by the membership of KDE e.V.), which shall act as a proxy + defined in Section 14 of version 3 of the license. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <qglobal.h> +#if QT_VERSION >= 0x050000 +#include <QApplication> +#else +#include <KAboutData> +#include <KApplication> +#include <KCmdLineArgs> +#endif + +int main(int argc, char **argv) +{ +#if QT_VERSION >= 0x050000 + QApplication app(argc, argv); + // enable crash handler +#else + KAboutData aboutData("testcrashhandler", 0, KLocalizedString(), + "0.0.0", KLocalizedString(), KAboutData::License_GPL, + KLocalizedString(), KLocalizedString(), + ""); + KCmdLineArgs::init(argc, argv, &aboutData); + KApplication app; +#endif + int *a = 0; + *a = 1; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/unittests/testumlobject.cpp new/umbrello-16.12.1/unittests/testumlobject.cpp --- old/umbrello-16.12.0/unittests/testumlobject.cpp 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/unittests/testumlobject.cpp 2017-01-09 20:11:13.000000000 +0100 @@ -230,4 +230,15 @@ QCOMPARE(UMLObject::toI18nString(UMLObject::ot_Class), i18n("Class &name:")); } +void TestUMLObject::test_dynamic_cast() +{ + QScopedPointer<UMLObject> a1(new UMLClassifier); + UMLClassifier *b = a1->asUMLClassifier(); + QVERIFY(b); + UMLObject *a2 = 0; + b = a2->asUMLClassifier(); + QVERIFY(!b); +} + + QTEST_MAIN(TestUMLObject) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umbrello-16.12.0/unittests/testumlobject.h new/umbrello-16.12.1/unittests/testumlobject.h --- old/umbrello-16.12.0/unittests/testumlobject.h 2016-12-06 21:07:36.000000000 +0100 +++ new/umbrello-16.12.1/unittests/testumlobject.h 2017-01-09 20:11:13.000000000 +0100 @@ -41,6 +41,7 @@ void test_setUMLPackage(); void test_setVisibility(); void test_toString(); + void test_dynamic_cast(); }; #endif // TESTUMLOBJECT_H
