<!DOCTYPE html>
<html>

  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  
    <title>Sirius | What's New in Sirius 4.0</title>
  
    <meta name="description" content="The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects, including runtimes, tools and frameworks">
    <link rel="shortcut icon" type="image/png" href="/sirius/images/favicon_sirius.ico"/>
  
    <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
    <link rel="stylesheet" href="/sirius/common_assets/css/styles.css">
    <link rel="stylesheet" href="/sirius/common_assets/css/animate.css">
    <link rel="stylesheet" href="/sirius/common_assets/css/media.css"/>
    <link rel="stylesheet" href="/sirius/assets/css/main.css"/>

    <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
    <script src="/sirius/common_assets/js/magnific-popup.video.js"></script>
    <script src="/sirius/common_assets/js/magnific-popup.min.js"></script>

    <!-- Eclipse Foundation Google Tag Manager -->
	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
        new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
        j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
        'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
        })(window,document,'script','dataLayer','GTM-5WLCZXC');</script>
        <!-- End Google Tag Manager -->  
        
        <!-- Eclipse Foundation cookie consent: -->
        <link rel="stylesheet" type="text/css" href="//www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css" />
        <script src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script>  
        
        <script src= "/sirius/assets/js/ga.js"></script>

    <!-- Old version of font awesome for some icons -->
    <script src="https://use.fontawesome.com/b51f77a16a.js"></script>    
    <!-- Bootstrap JS -->
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
    
    <script>
        jQuery(function($){ $(".hasTooltip").tooltip({"html": true,"container": "body"}); });
    </script>
    <!-- Triggers tooltips -->
    <script>
        jQuery(document).ready(function() {
            jQuery('.hasTooltip').tooltip();
        });
    </script>
</head>
  
  <body>

    <!-- Navigation -->
<header id="top-bar" class="navbar navbar-expand-xl fixed-top">
    <div class="container">
        <div id="super-menu" class="d-flex">
            <nav class="main-menu ml-auto">
                <ul class="nav navbar-nav">
                    <li class="current"><a href=".">Sirius Desktop</a></li>
                    <li><a class="txt_purple" href="sirius-web">Sirius Web</a></li>
                </ul>
            </nav>
        </div>
        <div class="d-flex" id="main-menu-items">
            <a class="navbar-brand" href="/sirius">
                <img src="/sirius/common_assets/images/logos/logo_sirius.png" alt="Logo Sirius">
            </a>
            <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive"
                aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
                <i class="fa fa-bars"></i>
            </button> 
            <nav class="navbar-collapse collapse" id="navbarResponsive">
                <div class="main-menu ml-auto">
                    <ul class="nav navbar-nav">
                        <li>
                            <a href="overview">Overview</a>
                        </li>
                        <li>
                            <a href="gallery">Gallery</a>
                        </li>
                        <li>
                            <a href="getstarted">Get Started</a>
                        </li>
                        <li>
                            <a href="features">Features</a>
                        </li>
                        <li>
                            <a href="resource-center">Resources</a>
                        </li>
                        <li>
                            <a href="support">Support</a>
                        </li>
                        <li id="dwnld">
                            <a href="download">Download</a>
                        </li>
                    </ul>
                </div>
            </nav>
        </div>
    </div>
</header>
<section id="sirius-web-bar" class="bg_purple">
    <div class="container">
        <div class="row">
            <div class="col-md-1 col-xs-12 my-auto">
                <p class="cloud txt_white text-center"><i class="fas fa-cloud" aria-hidden="true"></i></p>
            </div>
            <div class="col-md-8 col-xs-12">
                <h5 class="txt_white">Web version is now available!</h5>
                <p class="descr txt_white">What you like in Sirius Desktop, in a modern cloud-based stack.</p>
            </div>                                
            <div class="col-md-3 col-xs-12 my-auto">
                <p><a class="text-uppercase txt_yellow" href="sirius-web" target="">Discover Sirius Web <i class="fas fa-arrow-alt-circle-right" aria-hidden="true"></i></a></p>
            </div>
        </div>
    </div>
</section>
    
    <section class="bg_lightest_grey text-center intro">
    <div class="container">
            <h2 class="title wow fadeInDown" data-wow-duration="500ms" data-wow-delay=".2s">What's New in Sirius 4.0</h2> 
<h3 class="wow fadeInDown" data-wow-duration="500ms" data-wow-delay=".3s"></h3>
<p class="wow fadeInDown" data-wow-duration="500ms" data-w ow-delay=".4s"></p>



    </div>
</section>

<section>
    <div class="container">

		<p>What is making Eclipse Sirius so unique? That’s its capability to easily create custom graphical modeling tools adapted
			to each specific need.</p>
		<p>With Sirius 4.0 we wanted to bring you new customization features to represent and edit your data, so that you can manage
			even more cases specific to your own business domain.</p>
		<br />
		<br />

		<div class="section">
			<h2>
				<a name="properties_view"></a>Properties Views
			</h2>
			<p>You like how simple it is to define diagrams with Sirius? Now, you will love how to define beautiful and ergonomic custom
				properties views! Sirius 4.0 comes with an integrated way to define your own properties views in the same way as you
				are used to define the other parts of your representations: no need to code, it is dynamic and query based.</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/properties.png" width="975" alt="" border="0" />
			</p>

			<p>Now, Sirius allows you to specify and group widgets to represent and edit your semantic elements: text, text area, checkbox,
				select… on which you can also specify conditional styles and validation rules.</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/properties1.png" alt="" border="0" />
			</p>

			<p>And the icing on the cake: if you don’t specify any specific property view, Sirius automatically provides dynamic views
				that are already much better compared to those coming with EMF.</p>

			<p>Provided as experimental, this feature will be officially available with Sirius 4.1, just after Neon.1. Meantime, you
				can already install it and dramatically improve your graphical editors and help us streamline the feature with your feedback.</p>
		</div>


		<div class="section">
			<h2>
				<a name="customization"></a>More graphical customizations
			</h2>
			<p>Sirius 4.0 offers many new options to improve the user experience on your diagrams, such as you can build modeling tools
				that better fit your business domain’s requirements.</p>

			<h3>
				<b>Preferred side for border nodes</b>
			</h3>
			<p>On a container having border nodes, now you can specify on which side each kind of border node should be placed: SOUTH,
				WEST, NORTH or EAST.</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/preferred-side2.png" alt="" border="0" />
			</p>

			<p>Sirius will automatically place the nodes on the right side and prevent the user to move a border on unwanted sides.</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/preferred-side-sample.png" alt="" border="0" />
			</p>
			<p>&nbsp;</p>

			<h3>
				<b>Contribute customizable SVG shapes</b>
			</h3>
			<p>With Sirius 4.0 you can go further with SVG files: declare bundled image shapes and you will get a library of images that
				you can dynamically customize!</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/bundle-image-spec.png" alt="" border="0" />
			</p>

			<p>You can change the color, the border color and the border size. By combining this new feature with conditional styles,
				the same SVG image will change according to the properties of the diagram element.</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/bundle-image-label.png" alt="" border="0" />
			</p>
			<p>&nbsp;</p>

			<h3>
				<b>User configurable filters</b>
			</h3>
			<p>Filters allow users to hide diagram elements according to predefined rules. With Sirius 4.0, it is possible to define
				filters that can be configured by the user.</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/filter.png" alt="" border="0" />
			</p>


			<p>When the user selects the filter, a dialog appears for each variable that lets him define its own value.</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/filter-run.gif" alt="" border="0" />
			</p>
			<p>&nbsp;</p>

			<h3>
				<b>Fully customizable tabbar</b>
			</h3>
			<p>The content of the diagrams tabbar can be completely reorganized according to your needs. It was already possible to add
				buttons, but now you can also remove default buttons or change their order. This can be done thanks to a new extension
				point named org.eclipse.sirius.diagram.ui.tabbarContributor.
			</p>

			<h3>
				<b>EMF.Edit customizations</b>
			</h3>
			<p>Now, when writing expressions, you can reuse customizations defined in the EMF.Edit plugin: label providers, property
				descriptors, etc. This can be done by using a new class named org.eclipse.sirius.ext.emf.edit.EditingDomainServices
			</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/emf_logo.png" alt="" border="0" />
			</p>
		</div>

		<div class="section">
			<h2>
				<a name="internationalization"></a>Internationalization
			</h2>
			<p>With Sirius 4.0 your modeling tools become localizable! All the fields containing a value visible by the end user are
				represented with a blue background in the Viewpoint Specification Model.
			</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/internationalization.png" alt="" border="0" />
			</p>

			<p>They indicate that you can use keys (%myKey) that will be replaced at runtime with a value depending on the current language
				(the values are defined in the files plugin_XX.properties).</p>

			<h3>
				<a name="ux_improvements"></a>UX improvements
			</h3>
			<p>Many other improvements come with this new release. Here is a glimpse of those that directly concern the users’ experience.</p>
			<h3>
				<b>Better SVG rendering</b>
			</h3>
			<p>The management of SVG files have been improved to keep a high-quality rendering when zooming or resizing an image.</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/svg.gif" alt="" border="0" />
			</p>
			<p>&nbsp;</p>

			<h3>
				<b>Dragging the diagram</b>
			</h3>
			<p>Like tools such as Google Maps, you can now click and drag the diagram to change the visible area. With Sirius, this drag
				mechanism is available with a middle click.</p>

			<p>
				<img class="shadow" src="../images/whatsnew4/drag.gif" alt="" border="0" />
			</p>
			<p>&nbsp;</p>
			<h3>
				<b>Quicker sessions closing</b>
			</h3>
			<p>A significant improvement has been brought in the 4.0 release to make large sessions unload almost immediately.</p>

			<p>
				Just
				<a href="../download.html">download</a> this new version and try it right now!
			</p>
			<p>
				The complete list of changes is available here:
				<a href="http://www.eclipse.org/sirius/doc/Release_Notes.html#sirius4.0.0" title="New & Noteworthy">http://www.eclipse.org/sirius/doc/Release_Notes.html#sirius4.0.0</a>.
			</p>
			<p>Read
				<a href="http://eclipse.org/sirius/whatsnew/whatsnew3-1.html" title="New & Noteworthy">What's new in Sirius 3.1</a> to see the new and noteworthy features of previous version.</p>
			<br />
		</div>
	</div>
</section>

<footer>
  <div class="container">
      <div class="row">    
        
<div class="col-md-3">
    <p><a href="http://www.eclipse.org/"  target="_blank"><img src="/sirius/common_assets/images/logos/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a></p>
    <p id="copyright">Copyright © 2021 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
</div>

<div class="col-md-3">
    <h6>Eclipse Foundation</h6>
    <ul>
        <li><a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a></li>
        <li><a href="http://eclipse.org/" target="_blank">Eclipse</a></li>
        <li><a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a></li>
        <li><a href="http://www.eclipse.org/legal/copyright.php" target="_blank">Copyright Agent</a></li>
        <li><a href="http://www.eclipse.org/legal/" target="_blank">Legal</a></li>
        <li><a href="http://www.eclipse.org/org/foundation/contact.php" target="_blank"> Contact Us</a></li>
    </ul>
</div>

        
<div class="col-md-3">
    <h6>Project Links</h6>
    <ul>
        <li><a href="https://projects.eclipse.org/projects/modeling.sirius" target="_blank">About this project</a></li>
        <li><a href="https://wiki.eclipse.org/Sirius" target="_blank">Wiki</a></li>
        <li><a href="https://www.eclipse.org/forums/index.php?t=thread&frm_id=262" target="_blank">Forum</a></li>
        <li><a href="https://bugs.eclipse.org/bugs/buglist.cgi?list_id=6776579&classification=Modeling&query_format=advanced&product=Sirius" target="_blank">Bugs</a></li>
        <li><a href="https://git.eclipse.org/c/sirius/org.eclipse.sirius.git" target="_blank">Source Code</a></li>
    </ul>
</div>
    </div>
  </div>
</footer>

    
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous" defer></script>

<script src="/sirius//common_assets/js/wow.min.js" defer></script>
<script src="/sirius//common_assets/js/main.js" defer></script>
<script src="/sirius//common_assets/js/magnific-popup.min.js" defer></script>
<script src="/sirius//common_assets/js/magnific-popup.video.js" defer></script>
<!-- Call wow function -->
<script>
        jQuery(document).ready(function(){
            "use strict";
            new WOW().init();
            jQuery('.smooth-scroll').scrollingTo();

            var url = window.location;
            // Will only work if string in href matches with location
            jQuery('ul.nav a[href="'+ url +'"]').parent().addClass('active');

            // Will also work for relative and absolute hrefs
            jQuery('ul.nav a').filter(function() {
                return this.href == url;
            }).parent().addClass('active');

            jQuery(".nav a").on("click", function(){
                jQuery(".nav").find(".active").removeClass("active");
                jQuery(this).parent().addClass("active");
            });
        });
</script>
  
  </body>
</html>
