public ExternalToolPanelWidget () 
		{
			Build ();
			// instantiate controls			
			toolListBoxStore = new ListStore (typeof (string), typeof (ExternalTool));

			dependendControls = new Widget[] {
				titleTextBox, argumentTextBox, 
				workingDirTextBox, promptArgsCheckBox, useOutputPadCheckBox,
				titleLabel, argumentLabel, commandLabel, defaultKeyLabel,
				defaultKeyTextBox, keyBindingInfoEventBox,
				workingDirLabel, browseButton,
				moveUpButton, moveDownButton,
				saveCurrentFileCheckBox,
				tagSelectorArgs, tagSelectorPath
			};
			 
			foreach (ExternalTool tool in ExternalToolService.Tools) {
				toolListBoxStore.AppendValues (tool.MenuCommand, tool);
				toolListBoxItemCount ++;
			}

			toolListBox.Reorderable = false;
			toolListBox.HeadersVisible = true;
			toolListBox.Selection.Mode = SelectionMode.Multiple;
			toolListBox.Model = toolListBoxStore;
			toolListBox.SearchColumn = -1; // disable the interactive search

			toolListBox.AppendColumn (GettextCatalog.GetString ("Tools"), new CellRendererText (), "text", 0);

			tagSelectorArgs.TagModel = IdeApp.Workbench.GetStringTagModelDescription ();
			tagSelectorArgs.TargetEntry = argumentTextBox;
			
			tagSelectorPath.TagModel = IdeApp.Workbench.GetStringTagModelDescription ();
			tagSelectorPath.TargetEntry = workingDirTextBox;

			keyBindingInfoTooltip = new EventBoxTooltip (keyBindingInfoEventBox) {
				Severity = Tasks.TaskSeverity.Warning
			};

			toolListBox.Selection.Changed += SelectionChanged;
			removeButton.Clicked          += RemoveButtonClicked;
			addButton.Clicked             += AddButtonClicked;
			moveUpButton.Clicked          += MoveUpButtonClicked;
			moveDownButton.Clicked        += MoveDownButtonClicked;
			
			browseButton.PathChanged        += StoreValuesInSelectedTool;
			titleTextBox.Changed            += StoreValuesInSelectedTool;
			argumentTextBox.Changed         += StoreValuesInSelectedTool;
			workingDirTextBox.Changed       += StoreValuesInSelectedTool;
			promptArgsCheckBox.Toggled      += StoreValuesInSelectedTool;
			useOutputPadCheckBox.Toggled    += StoreValuesInSelectedTool;
			saveCurrentFileCheckBox.Toggled += StoreValuesInSelectedTool;

			defaultKeyTextBox.KeyPressEvent += OnDefaultKeyEntryKeyPress;
			defaultKeyTextBox.KeyReleaseEvent += OnDefaultKeyEntryKeyRelease;

			SelectionChanged (this, EventArgs.Empty);
		}
		void NameTextChanged (object sender, EventArgs e)
		{
			wizardPage.LibraryName = nameTextBox.Text;

			if (wizardPage.HasLibraryNameError ()) {
				if (nameTooltip == null) {
					nameTooltip = ShowErrorTooltip (nameEventBox, wizardPage.LibraryNameError);
				}
			} else {
				if (nameTooltip != null) {
					HideTooltip (nameEventBox, nameTooltip);
					nameTooltip = null;
				}
			}
		}
		void HideTooltip (EventBox eventBox, EventBoxTooltip tooltip)
		{
			Dispose (tooltip);
			eventBox.Foreach (eventBox.Remove);
		}
		void PackageIdTextBoxChanged (object sender, EventArgs e)
		{
			wizardPage.Id = packageIdTextBox.Text;

			if (wizardPage.HasIdError ()) {
				if (idTooltip == null) {
					idTooltip = ShowErrorTooltip (idEventBox, wizardPage.IdError);
				}
			} else {
				if (idTooltip != null) {
					HideTooltip (idEventBox, idTooltip);
					idTooltip = null;
				}
			}
		}