<!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 6.1</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.html">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.html">Overview</a>
                        </li>
                        <li>
                            <a href="gallery.html">Gallery</a>
                        </li>
                        <li>
                            <a href="getstarted.html">Get Started</a>
                        </li>
                        <li>
                            <a href="features.html">Features</a>
                        </li>
                        <li>
                            <a href="resource-center.html">Resources</a>
                        </li>
                        <li>
                            <a href="support.html">Support</a>
                        </li>
                        <li id="dwnld">
                            <a href="download.html">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.html" 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 6.1</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">
		<ul>
		<li><a class="smooth-scroll" href="#visibility" data-row="#visibility">Management of hidden diagram elements</a></li>
		<li><a class="smooth-scroll" href="#menus" data-row="#menus">Organization of popup menus</a></li>
		<li><a class="smooth-scroll" href="#column" data-row="#column">First column width</a></li>
		<li><a class="smooth-scroll" href="#migration" data-row="#migration">Migration from previous Sirius versions</a></li>
		<li><a class="smooth-scroll" href="#license" data-row="#license">New EPL licence version</a></li>
		<li><a class="smooth-scroll" href="#more" data-row="#more">More...</a></li>
		</ul>

		<div id="visibility"></div>
		<h2>Management of hidden diagram elements</h2>
		<p>On diagrams a new mode allows to visualize elements that has been hidden manually. When this mode is activated, hidden elements (nodes, containers, edges) appear lighter on the diagram.</p>
		<p><img class="shadow" src="../images/whatsnew6_1/sirius-6-1-visibility.png"></p>
		<p>They can be made visible again by just double-clicking on them.</p>
		<p>Coming with this evolution, a new dropdown menu gathering the layouting, visibility and standard mode has been added to the tabbar. The standard mode corresponds to a diagram editor without the layouting and visibility mode activated.</p>
		<p>This <a href="https://blog.obeosoft.com/a-visibility-mode-for-sirius-diagrams" target="_blank">blog post</a> describes this new feature.</p>
		<p>&nbsp;</p>
		<div id="menus"></div>
		<h2>Organization of popup menus</h2>
		<p>The creator of a Sirius-based modeling tool can better manage contextual popup menus by using groups.</p>
		<p>In addition to specific menus in the main popup menu, now it is also possible to group actions (displayed under a separator) and to create menus on several sub-levels.</p>
		<p><img src="../images/whatsnew6_1/sirius-6-1-menus.png" width="800" /></p>
		<p>This <a href="https://blog.obeosoft.com/organize-your-actions-in-diagrams-contextual-menus" target="_blank">blog post</a> describes this new feature.</p>
		<p>&nbsp;</p>
		<div id="column"></div>
		<h2>First column width</h2>
		<p>The first column of a table (default header column) can be hidden by default by specifying value -1 in the Initial Header Column Width field of Edition table representation.</p>
		<p><img src="../images/whatsnew6_1/sirius-6-1-table.png" /></p>
		<p>This <a href="https://blog.obeosoft.com/one-more-step-in-sirius-tables-customization" target="_blank">blog post</a> describes this new feature.</p>
		<p>&nbsp;</p>
		<div id="migration"></div>
		<h2>Migration from previous Sirius versions</h2>
		<p>When opening a modeling project created with an older version of Sirius, the project was automatically and transparently migrated to the current version.</p>
		<p>Now, since Sirius 6.1, a preference has been added to ask the user if he wants to save session resources after an automatic migration.</p>
		<p>&nbsp;</p>
		<div id="license"></div>
		<h2>New EPL licence version</h2>
		<p>Sirius licence has been upgrade to <a href="https://www.eclipse.org/legal/epl-2.0/" target="_blank">Eclipse Public License 2.0.</a></p>
		<p>Changes are explained in this <a href="https://www.eclipse.org/legal/epl-2.0/faq.php" target="_blank">FAQ</a></p>
		<p>&nbsp;</p>
		<div id="more"></div>
		<h2>And even more</h2>
		<p>A comprehensive list of Sirius 6.1 changes can be found in the <a href="https://www.eclipse.org/sirius/doc/Release_Notes.html#sirius6.1.0" target="_blank">Official Release Notes</a>.</p>
		<p>&nbsp;</p>
		<h2>Previous versions</h2>
		<p>Read <a href="https://eclipse.org/sirius/whatsnew/whatsnew6.html" title="New & Noteworthy">What's new in Sirius 6.0</a> to see the new and noteworthy features of previous version.</p>
</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>
