Jump to: navigation, search

Difference between revisions of "HowTo:Inject UI into UBIK Studio"


 
(20 intermediate revisions by one other user not shown)
Line 1: Line 1:
{{UnderConstructionStart}}
+
Since version 5.2 {{Version/ServerSince|5.2.0}} it is possible to inject UI into {{UBIK}} Studio.<br>
 
+
Since version 5.2 {{Version/ServerSince|5.2}} it is possible to inject UI into {{UBIK}} Studio.<br>
+
 
The injected UI can be displayed inside a User Control and or Window.<br>
 
The injected UI can be displayed inside a User Control and or Window.<br>
This article will help you to inject your UI!<br>
+
This article will explain how to inject the desired UI.<br>
 
<!-- DO NOT REMOVE THIS -->{{Template:HowTo/Begin}}<!-- DO NOT REMOVE THIS -->
 
<!-- DO NOT REMOVE THIS -->{{Template:HowTo/Begin}}<!-- DO NOT REMOVE THIS -->
 
= User Control =
 
= User Control =
 
===Goal===
 
===Goal===
 
The goal is to extend the existing user control list with the injected user control.<br>
 
The goal is to extend the existing user control list with the injected user control.<br>
The mentioned list pops up every time you drag an instance to a new window.
+
The mentioned list pops up every time an instance is dragged to a new tab header.
 
+
[[File:InjectedUserControl.png|thumb|left|735px|Extended user control list]]
[[File:InjectedUserControl.png|thumb|left|735px|Extended user control list]] <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
+
<br clear="all" />
 
=== Implementation ===
 
=== Implementation ===
1. Create or reuse a .Net library (DLL) project - it doesn't have to be a {{UBIK}} Module.<br>
+
# Create or reuse a vs .NET library (DLL) project - it doesn't have to be a {{UBIK}} Module.
2. Add the designated control as a class deriving from System.Windows.Forms.UserControl to the project.<br>
+
# Add the designated control as a class deriving from System.Windows.Forms.UserControl to the project.
3.Implement the interface IUBIKEnvironmentControl for the control.<br>
+
# Implement the interface IUBIKEnvironmentControl for the control.
4. For automatic injection, add the "Export" Attribute with the "IUBIKControl" type parameter to the designated control.<br>
+
# For automatic injection, add the "Export" Attribute with the "IUBIKControl" type parameter to the designated control.
<syntaxhighlight lang="csharp">
+
#;<syntaxhighlight lang="csharp">
 
[Export(typeof(IUBIKControl))]
 
[Export(typeof(IUBIKControl))]
 
public partial class TestUserControl: UserControl, IUBIKEnvironmentControl
 
public partial class TestUserControl: UserControl, IUBIKEnvironmentControl
 
</syntaxhighlight>
 
</syntaxhighlight>
5. The user control now has a property Description and Image.<br>
+
# The user control now has a property Description and Image.
6. Set the properties in the User Control's constructor. The image and description can be loaded directly from the .NET project's resources. These values will then be displayed in the User Control list.
+
# Set the properties in the user control's constructor. The image and description can be loaded directly from the .NET project's resources. These values will then be displayed in the User Control list.
<syntaxhighlight lang="csharp">
+
#;<syntaxhighlight lang="csharp">
 
   public TestUserControl()
 
   public TestUserControl()
 
   {
 
   {
Line 30: Line 28:
 
   }
 
   }
 
</syntaxhighlight>
 
</syntaxhighlight>
7. Provide the updated DLL containing your UserControl in UBIK® Studio's [[Injection_Management#Injection_Folder.28s.29|Injection]] folder.<br>
+
# Provide the updated DLL containing your user control in UBIK® Studio's [[Injection_Management#Injection_Folder.28s.29|Injection]] folder.
8. After connecting to a database with UBIK® Studio, the new control can be accessed by right-clicking or dragging a UBIK® object on a tab header - it should appear in the list of possible controls.<br><br>
+
# After connecting to a database with UBIK® Studio, the new control can be accessed by right-clicking or dragging a UBIK® object on a tab header - it should appear in the list of possible controls.
  
 
= Window =  
 
= Window =  
=== Overview ===
+
=== Goal ===
A additional button can be added to the tool bar
+
The goal is to extend the toolbar by injecting a button that opens the desired window.<br>
[[File:InjectedButton.png|thumb|left|290px|Injected button]]<br><br><br><br><br><br><br><br><br><br><br>
+
In addition, the “View” menu will be extended with a new entry that also opens the window.
 +
[[File:InjectedButton.png|thumb|left|298px|Injected button]]
 +
[[File:InjectedMenuEntry.png|thumb|left|508px|Injected menu entry]]
 +
<br clear="all" />
 +
 
 
=== Implementation ===
 
=== Implementation ===
1. Create or reuse a .Net library (DLL) project - it doesn't have to be a {{UBIK}} Module.<br>
+
# Create or reuse a vs .NET library (DLL) project - it doesn't have to be a {{UBIK}} Module.
2. Add the designated window as a class deriving from System.Windows.Window to the project.<br>
+
# Add the designated window as a class deriving from System.Windows.Window to the project.
3. Create a new class.<br>
+
# Create a new class.
4. Implement the inferface IUBIKWindowFactory for the new class.<br>
+
# Implement the inferface IUBIKWindowFactory for the new class.
5. For automatic injection, add the "Export" Attribute with the "IUBIKWindowFactory" type parameter to the designated class.<br>
+
# For automatic injection, add the "Export" Attribute with the "IUBIKWindowFactory" type parameter to the designated class.
<syntaxhighlight lang="csharp">
+
#;<syntaxhighlight lang="csharp">
 
[Export(typeof(IUBIKWindowFactory))]
 
[Export(typeof(IUBIKWindowFactory))]
 
public class TestWindowFactory : IUBIKWindowFactory
 
public class TestWindowFactory : IUBIKWindowFactory
 
{
 
{
     public Bitmap Icon =>Properties.Resources.IntelligentAtelierImage;
+
     public Bitmap Icon =>Properties.Resources.MyImage;
  
     public string Label => Properties.Resources.IntelligentAtelierLabel;
+
     public string Label => Properties.Resources.MyLabel;
  
 
     public Window GetWindow(UBIKEnvironment env)
 
     public Window GetWindow(UBIKEnvironment env)
Line 57: Line 59:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
6. The class now has a Icon and Label property.<br>
+
# The class now has a Icon and Label property.
7. Set the values for both properties. The icon and label can be loaded directly from the .NET project's resources (example above). The button and the menu entry will then display these values.<br>
+
# Set the values for both properties. The icon and label can be loaded directly from the .NET project's resources (example above). The button and the menu entry will display the values.
4. In the GetWindow method, return the window from step 2.<br>
+
# In the GetWindow method, return your window (step 2).
7. Provide the updated DLL containing your UserControl in UBIK® Studio's [[Injection_Management#Injection_Folder.28s.29|Injection]] folder.<br>
+
# Provide the updated DLL containing your window in UBIK® Studio's [[Injection_Management#Injection_Folder.28s.29|Injection]] folder.
8. After connecting to a database with UBIK® Studio, the new control can be accessed by the new button in the tool bar aswell as under menu entry "View".<br><br>
+
# After connecting to a database with UBIK® Studio, the new window can be accessed with the new button in the toolbar as well as under the "View" menu.
 
<!-- DO NOT REMOVE THIS -->{{Template:HowTo/End}}<!-- DO NOT REMOVE THIS -->
 
<!-- DO NOT REMOVE THIS -->{{Template:HowTo/End}}<!-- DO NOT REMOVE THIS -->
  
=See also=
+
==See also==
tbd.
+
* [[Injection_Management#Injection_Folder.28s.29|Injection Management]]
  
 
[[Category:How-To|Inject UI into UBIK Studio]]
 
[[Category:How-To|Inject UI into UBIK Studio]]

Latest revision as of 20:52, 17 June 2026

Since version 5.2 it is possible to inject UI into UBIK® Studio.
The injected UI can be displayed inside a User Control and or Window.
This article will explain how to inject the desired UI.

[edit]

User Control

Goal

The goal is to extend the existing user control list with the injected user control.
The mentioned list pops up every time an instance is dragged to a new tab header.

Extended user control list


Implementation

  1. Create or reuse a vs .NET library (DLL) project - it doesn't have to be a UBIK® Module.
  2. Add the designated control as a class deriving from System.Windows.Forms.UserControl to the project.
  3. Implement the interface IUBIKEnvironmentControl for the control.
  4. For automatic injection, add the "Export" Attribute with the "IUBIKControl" type parameter to the designated control.
    [Export(typeof(IUBIKControl))]
    public partial class TestUserControl: UserControl, IUBIKEnvironmentControl
  5. The user control now has a property Description and Image.
  6. Set the properties in the user control's constructor. The image and description can be loaded directly from the .NET project's resources. These values will then be displayed in the User Control list.
      public TestUserControl()
      {
          InitializeComponent();
          Description = Properties.Resources.Description;
          Image = Properties.Resources.MyImage;
      }
  7. Provide the updated DLL containing your user control in UBIK® Studio's Injection folder.
  8. After connecting to a database with UBIK® Studio, the new control can be accessed by right-clicking or dragging a UBIK® object on a tab header - it should appear in the list of possible controls.

Window

Goal

The goal is to extend the toolbar by injecting a button that opens the desired window.
In addition, the “View” menu will be extended with a new entry that also opens the window.

Injected button
Injected menu entry


Implementation

  1. Create or reuse a vs .NET library (DLL) project - it doesn't have to be a UBIK® Module.
  2. Add the designated window as a class deriving from System.Windows.Window to the project.
  3. Create a new class.
  4. Implement the inferface IUBIKWindowFactory for the new class.
  5. For automatic injection, add the "Export" Attribute with the "IUBIKWindowFactory" type parameter to the designated class.
    [Export(typeof(IUBIKWindowFactory))]
    public class TestWindowFactory : IUBIKWindowFactory
    {
        public Bitmap Icon =>Properties.Resources.MyImage;

        public string Label => Properties.Resources.MyLabel;

        public Window GetWindow(UBIKEnvironment env)
        {
            return new TestWindow(env);
        }
    }
  6. The class now has a Icon and Label property.
  7. Set the values for both properties. The icon and label can be loaded directly from the .NET project's resources (example above). The button and the menu entry will display the values.
  8. In the GetWindow method, return your window (step 2).
  9. Provide the updated DLL containing your window in UBIK® Studio's Injection folder.
  10. After connecting to a database with UBIK® Studio, the new window can be accessed with the new button in the toolbar as well as under the "View" menu.

See also