public void open() {
		shell = new Shell(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM );
		//shell.setImage(RepDevMain.xxxxx);
		
		FormLayout layout = new FormLayout();
		layout.marginTop = 10;
		layout.marginBottom = 10;
		layout.marginLeft = 10;
		layout.marginRight = 10;
		layout.spacing = 8;

		shell.setLayout(layout);

		shell.setText("Goto Section/Procedure");

		Group sectionGroup = new Group(shell, SWT.NONE);
		sectionGroup.setText(" Select Section or Procedure ");

		Label sectionLabel = new Label(sectionGroup, SWT.NONE);
		sectionLabel.setText("Goto");

		Collections.sort(secInfo);
		final Combo sectionList = new Combo(sectionGroup, SWT.READ_ONLY);
		int index=0;
		for(SectionInfo si : secInfo){
			sectionList.add(si.getTitle());
			if(caretOffset >= si.getPos() && caretOffset <= si.getLastInsertPos()+3){
				sectionList.select(index);
			}
			index++;
		}
		
		Button ok = new Button(shell, SWT.PUSH);
		ok.setText("Ok");

		Button cancel = new Button(shell, SWT.PUSH);
		cancel.setText("Cancel");

		// --- Key Events ---
		sectionList.addKeyListener(new KeyListener() {
				public void keyReleased(KeyEvent e){
					if(e.keyCode == 27){
						shell.dispose();
					}
				}
				public void keyPressed(KeyEvent e){}
			});
		
		cancel.addKeyListener(new KeyListener() {
				public void keyReleased(KeyEvent e){
					if(e.keyCode == 27){
						shell.dispose();
					}
				}
				public void keyPressed(KeyEvent e){}
			});
		
		ok.addKeyListener(new KeyListener() {
				public void keyReleased(KeyEvent e){
					if(e.keyCode == 27){
						shell.dispose();
					}
				}
				public void keyPressed(KeyEvent e){}
			});
		
		// --- Button events ---
		ok.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				ec.gotoSection(sectionList.getText());
				shell.dispose();
			}
		});

		cancel.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				shell.dispose();
			}
		});

		// Layout infos

		sectionGroup.setLayout(layout);
		FormData data = new FormData();
		data.top = new FormAttachment(0);
		data.left = new FormAttachment(0);
		data.right = new FormAttachment(100);
		sectionGroup.setLayoutData(data);

		data = new FormData();
		data.top = new FormAttachment(0);
		data.left = new FormAttachment(0);
		data.width=15;
		sectionLabel.setLayoutData(data);

		data = new FormData();
		data.top = new FormAttachment(0);
		data.left = new FormAttachment(sectionLabel);
		data.right = new FormAttachment(100);
		sectionList.setLayoutData(data);

		data = new FormData();
		data.top = new FormAttachment(sectionGroup);
		data.bottom = new FormAttachment(100);
		data.right = new FormAttachment(100);
		cancel.setLayoutData(data);

		data = new FormData();
		data.top = new FormAttachment(sectionGroup);
		data.right = new FormAttachment(cancel);
		data.bottom = new FormAttachment(100);
		ok.setLayoutData(data);

		sectionGroup.pack();
		shell.setDefaultButton(ok);

		shell.pack();
		shell.open();
		while (!shell.isDisposed()) {
			if (!shell.getDisplay().readAndDispatch())
				shell.getDisplay().sleep();
		}
		
	}