///<summary>Load an assembly's controls</summary>
		public SideTabDesigner(SideBarControl sideBar, Category category, IToolboxService toolboxService) : this(sideBar, category.Name, toolboxService)
		{
			foreach (ToolComponent component in category.ToolComponents) {
				if (component.IsEnabled) {
					ToolboxItem toolboxItem = new ToolboxItem();
					toolboxItem.TypeName    = component.FullName;
					toolboxItem.Bitmap      = ToolboxProvider.ComponentLibraryLoader.GetIcon(component);
					toolboxItem.DisplayName = component.Name;
					Assembly asm = component.LoadAssembly();
					toolboxItem.AssemblyName = asm.GetName();
					
					this.Items.Add(new SideTabItemDesigner(toolboxItem));
				}
			}
		}
		SetupDialogControlsSideTab(SideBarControl sideBar, Category category, IToolboxService toolboxService)
			: base(sideBar, category, toolboxService)
		{
		}
		public bool LoadToolComponentLibrary(string fileName)
		{
			if (!File.Exists(fileName)) {
				return false;
			}
			
			try {
				XmlDocument doc = new XmlDocument();
				doc.Load(fileName);
				
				if (doc.DocumentElement.Name != "SharpDevelopControlLibrary" ||
				    doc.DocumentElement.Attributes["version"] == null ||
				    doc.DocumentElement.Attributes["version"].InnerText != VERSION) {
					return false;
				}
				
				foreach (XmlNode node in doc.DocumentElement["Assemblies"].ChildNodes) {
					if (node.Name == "Assembly") {
						string assemblyName = node.Attributes["assembly"].InnerText;
						if (node.Attributes["path"] != null) {
							assemblies.Add(new ComponentAssembly(assemblyName, node.Attributes["path"].InnerText));
						} else {
							assemblies.Add(new ComponentAssembly(assemblyName));
						}
					}
				}
				
				foreach (XmlNode node in doc.DocumentElement["Categories"].ChildNodes) {
					if (node.Name == "Category") {
                        string name = PascalABCCompiler.StringResources.Get(node.Attributes["name"].InnerText);//roman//
						Category newCategory = new Category(name);
						foreach (XmlNode componentNode in node.ChildNodes) {
							ToolComponent newToolComponent = new ToolComponent(componentNode.Attributes["class"].InnerText,
								(ComponentAssembly)assemblies[Int32.Parse(componentNode.Attributes["assembly"].InnerText)],
								IsEnabled(componentNode.Attributes["enabled"]));
							newCategory.ToolComponents.Add(newToolComponent);
						}
						categories.Add(newCategory);
					}
				}
			} catch (Exception e) {
				ICSharpCode.Core.LoggingService.Warn("ComponentLibraryLoader.LoadToolComponentLibrary: " + e.Message);
				return false;
			}
			return true;
		}
 public static void AddComponentsFromAssembly(Assembly assembly)
 {
     if (assembly == typeof(System.Windows.Forms.Form).Assembly || assembly == typeof(int).Assembly)
         return;
     var types = assembly.GetTypes();
     var control_types = new List<Type>();
     Type controlType = typeof(System.Windows.Forms.Control);
     foreach (Type type in types)
         if (type.IsSubclassOf(controlType))
             control_types.Add(type);
     if (control_types.Count > 0)
     {
         string assemblyName = assembly.FullName;
         int ind = assemblyName.IndexOf(',');
         if (ind != -1)
             assemblyName = assemblyName.Substring(0, ind).Trim();
         Category cat = new Category(assemblyName);
         ComponentAssembly cas = new ComponentAssembly(assembly.FullName);
         foreach (Type type in control_types)
         {
             cat.ToolComponents.Add(new ToolComponent(type.FullName, cas, true));
         }
         var dynamicTab = new SideTabDesigner(sideBar, cat, toolboxService);
         dynamicTab.ItemRemoved += SideTabItemRemoved;
         dynamicTab.ItemsExchanged += SideTabItemsExchanged;
         sideBar.Tabs.Add(dynamicTab);
     }
 }
		public object Clone()
		{
			Category newCategory = new Category();
			newCategory.Name      = name;
			newCategory.IsEnabled = isEnabled;
			foreach (ToolComponent toolComponent in components) {
				newCategory.ToolComponents.Add(toolComponent.Clone());
			}
			return newCategory;
		}