void init() {
		display = new Display();
		shell = new Shell(display);
		shell.setText(TITLE_WITH_VERSION_AND_PATH);

		lockProgrammProcess(shell);

		try {
			shell.setImage(new Image(display, VermilionCascadeNotebook.class.getResourceAsStream("/images/logo.png")));

			GridLayout gl = new GridLayout(1, false);
			gl.horizontalSpacing = 0;
			gl.verticalSpacing = 1;
			gl.marginHeight = 0;
			gl.marginWidth = 1;

			shell.setLayout(gl);

			Composite upComposite = new Composite(shell, SWT.BORDER);
			gl = new GridLayout(1, false);
			gl.marginHeight = 0;
			gl.marginWidth = 2;
			upComposite.setLayout(gl);
			upComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
			topLabel = new Label(upComposite, SWT.BOLD);
			topLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
			topLabel.setText("/");

			Composite midComposite = new Composite(shell, SWT.NONE);
			midComposite.setBackground(midComposite.getDisplay().getSystemColor(SWT.COLOR_GREEN));
			midComposite.setLayoutData(new GridData(GridData.FILL_BOTH));

			Composite botComposite = new Composite(shell, SWT.BORDER);
			gl = new GridLayout(1, false);
			gl.marginHeight = 0;
			gl.marginWidth = 4;
			botComposite.setLayout(gl);
			botComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
			statusLabel = new Label(botComposite, SWT.BOLD);
			statusLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
			statusLabel.setText("Status Line");

			this.mainComposite = midComposite;

			createContent();

			addCapability(new ProgramAutoSave(this));
			addCapability(new TreeDragAndDrop(this));

			upComposite.pack();
			botComposite.pack();

			shell.pack();
			shell.setSize(700, 500);

			UI.centerShell(shell);
		} catch (Exception ex) {
			UI.messageDialog(VermilionCascadeNotebook.getInstance().getShell(), "Error of program initialization (" + ex + ")", 
					"Program initialization error: " + ex +"\r\nError stack: \r\n\r\n" + GeneralUtils.getStackTrace(ex));
			
			ex.printStackTrace();
		}
	}