Custom UI form
Visual Gene Developer allows a user to
develop a custom UI (user interface) form (or window).
o What is
'Custom UI form (or window)'?
In order to analyze
the CAI
profile or mRNA binding energy profile of the test sequence, you may click on
the menu item 'CAI profile v2' or 'mRNA profile v2' in the 'Toolbox' window.
When done, the custom UI form will be pop-up as shown in the following figure.
The diagram was drawn by executing a user-defined module that encodes
algorithms to plot GC contents or mRNA energy profiles. Because all graphic
functions are defined in the special class 'CustomUI', a user can easily
make use of those functions to draw lines or text. Therefore, Visual Gene
Developer gives a great advantage to expand software functionality by
adding new graphical analysis windows designed by users.
Let's check the source code of 'CAI profile v2'.
It is easy to recognize that the class 'CustomUI'
was used many times to draw line, string, or rectangle.
Function
Main()
'-------- Setting
---------------------------------------------------------------------------------------------------------------------
Window_Size=60 'Length of partial test sequence
Step_Size=3*3 'Interval between partial test
sequences through the entire sequence
'It should be a
multiple of 3
GeneService.Set_WTableFile=GeneService.Current_WTableFile
'------------------------------------------------------------------------------------------------------------------------------------------
SourceSeq=AppService.Workspace_Value
If
SourceSeq=""
then
Exit Function
End If
SourceSeq_Length=Len(SourceSeq)
Start_Position=1
End_Position=SourceSeq_Length
Buf_Str=""
'**** Graphics **********************
CustomUI.Define_Canvas
500,200
CustomUI.Form_BringToFront
CustomUI.Clear_Canvas
CustomUI.Form_Caption="CAI
profile diagram"
CustomUI.DrawLine
30,10,30,180,"Black"
CustomUI.DrawLine
30,180,490,180,"Black"
CustomUI.DrawString
5,95,"CAI","Blue"
CustomUI.DrawString
250,180,"Location","Blue"
CustomUI.DrawString
15,10,"1"
CustomUI.DrawString
15,170,"0"
CustomUI.Set_ForeColor_byName
"Black"
'*** Calculate CAI
************************************************
For
Current_Position=Start_Position to
End_Position
- Window_Size step Step_Size
AppService.InstantMsg
"Calculating CAI at " + CStr(Current_Position)
TestSeq=Mid(SourceSeq,Current_Position,Window_Size)
Local_CAI=
GeneService.Calculate_CAI(TestSeq,True)
X2=(Current_Position-Start_Position )/SourceSeq_Length*480+30
Y2=170-(Local_CAI*160)+10
If
Current_Position>Start_Position
Then
CustomUI.DrawLine
X1,Y1,X2,Y2
CustomUI.DrawRectangle
X2-1,Y2-1,2,2
CustomUI.Update_Canvas
End If
X1=X2
Y1=Y2
Buf_Str=Buf_Str + CStr(Current_Position) +
Chr(9) + CStr(Local_CAI) + Chr(13) + Chr(10)
Next
CustomUI.RawData=Buf_Str
CustomUI.Make_Clone
End Function
|
o Custom UI
form (window)
The custom UI window consists of a caption, toolbar, and canvas. A user can set
'form caption', define 'canvas' size, and plot figures in the 'canvas'.
Visual Gene Developer provides a toolbar to export
the image and raw data.
Clicking on the 'Clone' menu button, a user can duplicate the current Custom UI
form. Regarding X Y coordinates on canvas, left top corresponds to (0,0). X
values increase from the left to right and Y value increases from top to bottom.
o Specialized
class 'CustomUI'
The class 'CustomUI' has the ability to generate new Custom UI forms
and contains many graphic functions. The current version offers 27 functions
such as Define_Canvas, Clear_Canvas, Update_Canvas, DrawLine, DrawPie,
DrawRectangle, DrawBezier, and etc.
Check the complete list
of functions
Visual Gene Developer provides 5 instances of
the class 'CustomUI': 'CustomUI', 'CustomUI2', 'CustomUI3',
'CustomUI4', 'CustomUI5'.
Each instance represents and can operate a
single independent 'active Custom UI window'. Thus, a user can handle
a maximum five 'active Custom UI windows' at the same time. 'Active Custom
UI window' is the window where a user draws graphics. It is different
from the 'Cloned custom UI window' that can be generated by clicking on the
'Clone' button in the custom UI window.
Every module may use the same 'Active custom UI windows' and a user may
need to add one line code to duplicate the 'Active custom UI window' to keep
the image and raw data. The duplicated custom UI window can be called as
'cloned custom UI window'.
o How to
generate custom UI form
Step 1:
Define canvas and set
'Form caption'
CustomUI.Define_Canvas
500,200
CustomUI.Form_Caption="CAI
profile diagram" |
Function:
Sub
Define_Canvas (Width
As Integer,
Height
As Integer, Optional
ShowToolStrip
As Boolean)
Property
Form_Caption ()
As String
Step 2
(optional): Bring
the form to front and clear canvas
CustomUI.Form_BringToFront
CustomUI.Clear_Canvas
|
Function: Sub
Form_BringToFront ()
Sub
Clear_Canvas (Optional Color_byName
As String)
Step 3:
Draw graphics and
update the canvas
CustomUI.DrawLine
30,10,30,180,"Black"
CustomUI.DrawString
5,95,"CAI","Blue"
CustomUI.Update_Canvas
|
Function:
Sub
DrawLine (X1 As Integer, Y1
As Integer, X2
As Integer, Y2
As Integer,
Optional ForeColor_byName As String)
Sub
DrawString (X As Integer, Y
As Integer, TextStr
As String,
Optional ForeColor_byName As String)
Sub
Update_Canvas ()
When you call 'Update_Canvas' function, Visual
Gene Developer refreshes canvas to show an updated image. However, it doesn't
need to update the canvas every time. When you draw graphics like line, pie, or
rectangle, the canvas is already internally updated even if it doesn't show
the
updated image in real-time. Please remember that frequent calling of 'Update_Canvas'
function may delay processing time. However, a user may prefer it to give an
animation effect.
Step 4
(optional): Store raw
data for data export
CustomUI.RawData="Location"
+ Chr(9) + "CAI value" + Chr(13) + Chr(10) + "1" + Chr(9) +
"0.8" |
Function: Property
RawData () As
String
Grammar: Chr(9) generates Tab key,
Chr(13) + Chr(10) generates Carriage return
A user store raw data (not image) to the custom UI
window. When you call this function, the 'Copy raw data' toolbar button in
the custom UI window will be activated. Now, a user can export text raw data to
the clipboard anytime once he stores it.
Step 5
(recommended): Generate 'custom UI clone' and close 'active custom UI
window'
Function: Sub
Make_Clone ()
When a user calls this function, Visual Gene
Developer duplicates the current 'active custom UI form (window)' and then close
'active UI form'. Apparently, a user may not distinguish between 'active
custom UI form' and 'cloned custom UI window' because the duplicated custom
UI window will be shown exactly at the same location with the same size.
This function is important to keep the user's data in a separate UI form. We
remind you that there are five instances of the class 'CustomUI' and
consequently five active Custom UI windows. Active custom UI windows can be
shared with other modules.
o Advanced example 1: Codon bias
diagram
* Imitation of the job done
by Plotkin and Kudla (Nature, 2011, p32-42)
* The algorithm was developed
using VBScript. Check the code in the 'Module Library' and 'Module
Editor' windows
VBScript
Sub
Main()
'***** Setting *******************
MaxConstruct=99
LineWidth =7
LineHeight =5
'**** Ask target Gene Component ************
Info_Str=Get_ListOfComponents
Info_Str="List of Gene Component" + VBCrLF + VbCrLF +
Info_Str + VbCrLF + + VbCrLF + "Input number!"
ComponentIndex=InputBox(Info_Str,"Codon bias diagram")
ComponentCount=
GeneConstruct.ComponentCount
If
ComponentIndex <= 0 or -ComponentCount > -ComponentIndex
Then
MsgBox
"Incorrect number!"
Exit Sub
End If
'**** Set Range
**********************************************************
Currnent_ConstructIndex=GeneConstruct.CurrentConstructIndex
Construct_Count=GeneConstruct.ConstructCount
Construct_End=Currnent_ConstructIndex + MaxConstruct
If
Construct_End>Construct_Count
Then
Construct_End=Construct_Count
'**** Initialize Graphics **********************
CustomUI.Define_Canvas
64*LineWidth+35,(Construct_End-Currnent_ConstructIndex)*LineHeight
+40
CustomUI.Form_BringToFront
CustomUI.Clear_Canvas
CustomUI.Form_Caption="Codon
bias diagram (based on RSCU)"
'**** Draw Codon text **********************
Output_Str="Number" + VBTab
CustomUI.Set_Font
8
For
Triplet_1st=1 to 4
For
Triplet_2nd=1 to 4
For
Triplet_3rd=1 to 4
CurrentTriplet=IndexToCGAT(Triplet_1st)+IndexToCGAT(Triplet_2nd)
CurrentTriplet=CurrentTriplet+IndexToCGAT(Triplet_3rd)
CurrentY=4
CurrentX=((Triplet_1st-1)*16+(Triplet_2nd-1)*4+(Triplet_3rd-1))*LineWidth
+30
If
Triplet_3rd=1 or Triplet_3rd=3
Then
CustomUI.Set_ForeColor_byName
"Red"
Else
CustomUI.Set_ForeColor_byName
"Blue"
End If
CustomUI.DrawString
CurrentX-1,CurrentY-3, IndexToCGAT(Triplet_1st)
CustomUI.DrawString
CurrentX-1,CurrentY+4, IndexToCGAT(Triplet_2nd)
CustomUI.DrawString
CurrentX-1,CurrentY+11, IndexToCGAT(Triplet_3rd)
Output_Str=Output_Str +
CurrentTriplet + VbTab
Next
Next
Next
Output_Str=Output_Str + VBCrLF
'**** Draw codon rscu diagram
*************************************
CustomUI.Set_Font
8
For
q = Currnent_ConstructIndex to Construct_End
SourceSeq=GeneConstruct.ParameterValue(q,ComponentIndex,"Modified
DNA")
GeneService.Calculate_CodonUsage
SourceSeq
CurrentY=(q-Currnent_ConstructIndex+1)*LineHeight +23
If
q=Int(q/5)*5
Then
CustomUI.DrawString
5,CurrentY-1, CStr(q),"Black"
End If
Output_Str=Output_Str + CStr(q) + VBTab
For
Triplet_1st=1 to 4
For
Triplet_2nd=1 to 4
For
Triplet_3rd=1 to 4
CurrentTriplet=IndexToCGAT(Triplet_1st)+IndexToCGAT(Triplet_2nd)
CurrentTriplet=CurrentTriplet+IndexToCGAT(Triplet_3rd)
CodonAddress64 =GeneService.Get_CodonAddress_Type64(CurrentTriplet)
CodonRSCU=GeneService.Get_CodonUsage_RSCU(CodonAddress64
)
CurrentX=((Triplet_1st-1)*16+(Triplet_2nd-1)*4+(Triplet_3rd-1))*LineWidth
+30
CustomUI.Set_FillColor_byRGB
CodonRSCU/3*255,0,255-CodonRSCU/3*255
CustomUI.FillRectangle
CurrentX,CurrentY,LineWidth,LineHeight
Output_Str=Output_Str +
CStr(CodonRSCU) + VbTab
Next
Next
Next
CustomUI.Update_Canvas
Output_Str=Output_Str + VBCrLF
Next
CustomUI.RawData=Output_Str
CustomUI.Make_Clone
End Sub
Function
IndexToCGAT(IndexNumber)
Select case IndexNumber
Case 1
IndexToCGAT="C"
Case 2
IndexToCGAT="G"
Case 3
IndexToCGAT="A"
Case 4
IndexToCGAT="T"
Case
Else
IndexToCGAT=""
End
Select
End Function
Function
Get_ListOfComponents
Buf_Str=""
ComponentCount=GeneConstruct.ComponentCount
For
q=1 to ComponentCount
Buf_Str=Buf_Str + CStr(q) + ": " +
GeneConstruct.ComponentName(1,q)
+ VBCrLf
Next
Get_ListOfComponents=Buf_Str
End Function |
|