public SourceViewer(JarStructure jarStructure) {
    super();

    this.jarStructure = jarStructure;

    toolBar = new WebPanel(true, new ToolbarLayout());
    toolBar.setDrawSides(false, false, true, false);
    toolBar.setShadeWidth(0);
    add(toolBar, BorderLayout.NORTH);

    classPath = new WebBreadcrumb(false);
    classPath.setEncloseLastElement(true);
    classPath.setElementMargin(4, 6, 4, 6);
    classPath.setOpaque(false);
    toolBar.add(classPath, ToolbarLayout.FILL);

    toolBar.add(createClassSearch(), ToolbarLayout.END);
    toolBar.add(createSettings(), ToolbarLayout.END);

    viewTabbedPane = new ViewTabbedPane();
    viewTabbedPane.setTabbedPaneStyle(TabbedPaneStyle.attached);
    viewChangeListener =
        new ChangeListener() {
          @Override
          public void stateChanged(ChangeEvent e) {
            updateClassPath(viewTabbedPane.getSelectedEntry(), false);
          }
        };
    viewTabbedPane.addChangeListener(viewChangeListener);
    viewTabbedPane.addViewListener(
        new ViewListener() {
          @Override
          public void viewOpened(JarEntry entry) {
            //
          }

          @Override
          public void viewClosed(JarEntry entry) {
            synchronized (activeEditorsLock) {
              // Removing opened editor
              activeEditors.remove(entry);
            }
            updateClassPath(viewTabbedPane.getSelectedEntry(), false);
          }
        });
    HotkeyManager.registerHotkey(
        viewTabbedPane,
        Hotkey.ALT_LEFT,
        new HotkeyRunnable() {
          @Override
          public void run(KeyEvent e) {
            final int tabCount = viewTabbedPane.getTabCount();
            if (tabCount > 0) {
              final int index = viewTabbedPane.getSelectedIndex();
              viewTabbedPane.setSelectedIndex(index > 0 ? index - 1 : tabCount - 1);
            }
          }
        });
    HotkeyManager.registerHotkey(
        viewTabbedPane,
        Hotkey.ALT_RIGHT,
        new HotkeyRunnable() {
          @Override
          public void run(KeyEvent e) {
            final int tabCount = viewTabbedPane.getTabCount();
            if (tabCount > 0) {
              final int index = viewTabbedPane.getSelectedIndex();
              viewTabbedPane.setSelectedIndex(index < tabCount - 1 ? index + 1 : 0);
            }
          }
        });
    add(viewTabbedPane, BorderLayout.CENTER);

    updateClassPath(null, false);
  }