public MainToolBar()
	{
		// Format those buttons to look natural (no background, border, etc)
		upButton.setMargin(new Insets(0, 0, 0, 0));
		upButton.setBorder(null);
		upButton.setOpaque(false);
		upButton.setContentAreaFilled(false);
		upButton.setBorderPainted(false);
		upButton.setEnabled(false);
		upButton.setFocusPainted(false);
		refreshButton.setMargin(new Insets(0, 0, 0, 0));
		refreshButton.setBorder(null);
		refreshButton.setOpaque(false);
		refreshButton.setContentAreaFilled(false);
		refreshButton.setBorderPainted(false);
		refreshButton.setFocusPainted(false);

		// Tooltips
		upButton.setToolTipText("Go up a folder");
		refreshButton.setToolTipText("Refresh");
		locationBar.setToolTipText("The current path, relative to the backup directory");

		// Format the directory text field to be disabled and a dark grey
		locationBar.setDisabledTextColor(new Color(0.2f, 0.2f, 0.2f));

		// Refresh button clicked
		refreshButton.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				// Disable options that require a selected file
				MainFrame.getInstance().menubar.copyToOption.setEnabled(false);
				MainFrame.getInstance().menubar.revisionsOption.setEnabled(false);

				// Recreate the table
				MainFrame.getInstance().redrawTable(MainFrame.getInstance().currentDirectory);
			}
		});

		// Up button clicked
		upButton.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				// Figure out the new path
				MainFrame.getInstance().currentDirectory = MainFrame.getInstance().currentDirectory.resolve(
						"..").normalize();

				// Disable the up button if we're in the backup directory
				if(MainFrame.getInstance().currentDirectory.equals(Main.backupDirectory))
				{
					MainFrame.getInstance().toolbar.upButton.setEnabled(false);
				}

				// Disable options that require a selected file
				MainFrame.getInstance().menubar.copyToOption.setEnabled(false);
				MainFrame.getInstance().menubar.revisionsOption.setEnabled(false);

				// And recreate the table
				MainFrame.getInstance().redrawTable(MainFrame.getInstance().currentDirectory);
			}
		});

		// Enter key pressed within the location bar
		locationBar.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				// Remove the separate character (it's just for looks)
				String text = locationBar.getText();
				if(!text.equals("") && text.charAt(0) == File.separatorChar)
				{
					text = text.substring(1);
				}

				// Calculate the new path
				Path enteredPath = null;
				try
				{
					enteredPath = Main.backupDirectory.resolve(text).toFile().getCanonicalFile().toPath();
				}
				catch(IOException e1)
				{
					Errors.nonfatalError("Could not interpret entered path.", e1);
				}

				// Make sure that the path is a directory and not a parent of the backup directory
				if(enteredPath.toFile().isDirectory()
						&& (!Main.backupDirectory.startsWith(enteredPath.normalize()) || Main.backupDirectory.equals(enteredPath.normalize())))
				{
					MainFrame.getInstance().redrawTable(enteredPath.normalize());
					MainFrame.getInstance().currentDirectory = enteredPath.normalize();
				}
				else
				{
					JOptionPane.showMessageDialog(MainFrame.getInstance(),
							"The entered directory does not exist or is outside of the backup directory.");
				}

				// Possible disable or enable the up button
				if(MainFrame.getInstance().currentDirectory.equals(Main.backupDirectory))
				{
					MainFrame.getInstance().toolbar.upButton.setEnabled(false);
				}
				else
				{
					MainFrame.getInstance().toolbar.upButton.setEnabled(true);
				}
			}
		});

		this.setFloatable(false);
		this.add(upButton);
		this.addSeparator();
		this.add(refreshButton);
		this.addSeparator();
		this.add(locationBar);
	}