| 
Basic Requirements For The Online-GUI-API
			 | 
			 | 
			| 
 The following states the basic requirement that must be 
satisfied to create a viable Online-GUI-API. The examples in the webpage prove that those requirements can be satisfied. 
			 | 
			 | 
			
First 
Invention:  Online 
GUI-API to build graphics intensive Web Applications
			 | 
		 | 
		| 
 The 
Computer graphics and Graphical User Interfaces (or 
“GUI”) is arguable one of the most successful 
technologies in the software industry. The successes 
of Apple computers and then Microsoft were mainly attributed 
to their successful deployment of the Computer Graphics. 
Due to the advancements of the Internet, it made those 
GUI technologies obsolete. Today even Microsoft decisively 
moving towards XML-graphics (called XAML/Avalon) in 
the Wondows-2006 (code named Longhorn). 
		 | 
		 | 
		| 
 It 
is very complex to present data driven large custom 
graphics Components using bare XML instructions (e.g. 
SVG, X3D, Microsoft’s Avalon/XAML or Macromedia’s 
MXML/Flash, DHTML etc.), therefore, it costs many times 
more than desktop application, to build online applications 
that can barely match 50% of the GUI-capabilities of 
the desktop GUI-applications. Our innovative GUI-API 
technology leverages those XML-graphics technologies 
(e.g. XAML or SVG) and provides simple and elegant GUI-API 
(e.g. Java or C# class library) abstraction for the 
developers to build superior next generation online 
GUI-applications. 
		 | 
		 | 
		| 
 Our 
GUI-technology consists of GUI-API (i.e. a class library), 
akin to UNIX/X11/Motif, Windows-API or Java/Swing (but 
simpler, highly flexible and not as much blotted). The 
GUI class generates 2D or 3D XML-graphics code (e.g. 
SVG, X3D, Microsoft’s XAML or Macromedia’s 
MXML/Flash) to present the component. To build a GUI-application, 
the GUI-Class system must support (i). Processes to 
build GUI-component hierarchy; and (ii). Processes to 
integrate the GUI-components. These 
are the two basic requirements for any GUI-API to build 
applications; and not much else. 
		 | 
		 | 
		| 
 Capabilities 
supported by Windows-GUI-API to build applications: 
To build desktop GUI-applications using Visual Basic, 
one uses Windows GUI-class API to build the components 
and places them in container components (to build component 
hierarchy). The GUI components can be manually assembled 
to build larger and larger interactive presentations 
in the application. 
		 | 
		 | 
		| 
 Then 
he needs to integrate the GUI-components. To accomplish 
this, he would register event-listener (or callback) 
functions for the control-components, and implements 
the callback-functions, which (i.e. code in the body 
of the function) request the services of other components. 
When a given event occurs on the control-component, 
the callback function will be invoked, which calls the 
service functions of other components. This is the general 
way two components communicate in the GUI-applications. 
The developer repeats similar code to integrate all 
the components in the application. 
		 | 
		 | 
		| 
 Pioneer-soft’s 
Online-GUI Classes can support these capabilities: 
In addition to generating 2D or 3D XML-graphics code, 
the classes in our GUI-API support innovative special 
characteristics (resulted from amazing discoveries), 
which make it possible to seamlessly create complex 
component hierarchies, than ever possible before, by 
writing just few lines of simple code. 
		 | 
		 | 
		| 
 By 
leveraging this capability (i.e. easily build complex 
component hierarchies) one can (i) quickly assemble 
fine-grained components to build large and highly customized 
components; and (ii) quickly assemble fine-grained classes 
to build large and highly flexible GUI classes (both 
reusable or custom) then never possible before. These 
processes would allow developers to build superior graphics 
intensive applications than possible before, at far 
less cost. 
		 | 
		 | 
		| 
 Furthermore, 
the GUI objects not only generate components for the 
application but also support special features, such 
as, support methods, such as, to provide the function 
names to access its services and many other elegant 
innovative processes to integrate the component. Hence, 
they make it possible to integrate the generated-components 
in the application, so that the components in the hierarchy 
could exchange messages and collaborate with each other. 
		 | 
		 | 
		
 
Therefore, the online-GUI-API or class library satisfy both needs stated above, hence 
can be used to build next generation online graphics intensive IT applications.  
		 | 
		 | 
		| 
 How 
does this technology works? & How Pioneer-soft’s 
GUI-API different from other technologies out there? 
		 | 
		 | 
		| 
 There 
are thousands vendors selling reusable GUI-Classes to 
present data-driven charts and graphs to include in 
the web pages. They all basically work similarly. Developer 
usually instantiate the reusable GUI-Class and supply 
real-time data and the GUI-Class generated necessary 
code (e.g. Flash or SVG) to present the component: 
		 | 
		 | 
		| 
		 | 
		
			
			
				| 
 // The Data
variables: Variables could be initialized at run-time. 
// (i.e. this data may be calculated at run-time, from the data 
// accessed from databases, obtained live-wire or Web-services) 
Double val[] = { 10000, 12000, 14000, 16000, 18000}; 
String names[] = {"Sun", "Microsoft", "IBM", "Intel", "Oracle"}; 
 
//Example for Reusable GUI Class:: ATPie is a Java Class for pie-chart 
//It contains presentation logic to generate SVG code to display a chart. 
 
//Sample code below, illustrates how to use the GUI-class for pie chart. 
//Instantiate 
&  Initialize an Object for the Reusable GUI Class  
ATPie Pie1 = new ATPie(" Portfolio at the end of 2dn
Quarter"); 
Pie1.setData(usr_data, 5,  val, names);  //Use
Class method to set Data 
 
// Method writes SVG-code for Pie-chart to ‘OUT’ stream (e.g. webpage) 
Pie1.CGM ( Out );  // Code generation Method
				  |  
			 
			 
			 | 
			| 
 Pseudo-code listing#1 
			 | 
			 | 
			| 
 Using 
this technique, any one could include one or more components 
in his web page. But, if you notice how desktop applications 
are build, it is absolutely essential that the components 
in the application need to be integrated, for example, 
to collaborate or to exchange data or notify events. 
If we like to build full-fledged online-applications; 
it is essential that the components in the web page 
must be integrated, so that they can communicate with 
each other. 
			 | 
			 | 
			
	
		| 
 JSP/Servilet
may instantiate & initialize GUI-Objects using respective reusable GUI Classes,
where each Object generates a 'code-block' for presenting a GUI component. 
(Likewise, GUI Class for a larger GUI component may
use other GUI Classes to build subcomponents) 
		  |  
		| 
  
		
  |  
		| 
 Figure#2
		  |  
	 
			 | 
			 | 
			| 
 Note: 
Due to the recent legacy of the Internet, we are calling 
them web pages, but they can be millions of line of 
source code (or even large compiled binaries, for example, 
Flash or MAXL real-time compiler) of the complex applications. 
			 | 
			 | 
			| 
 If 
you use the Reusable GUI-API (e.g. Java Classes in your 
JSP file) to include two components in your web page, 
how do you integrate the components that are placed 
in the web page? Today it is not Possible! 
			 | 
			 | 
			
Important 
Note: Remember that the components are dynamically 
generated using reusable-GUI-Classes (and may have used 
real-time data from data sources). Of course, one might 
integrate the components, if he hand written all the 
code using bare DHTML/HTML, XAML, SVG or MXML/Flash instructions 
to present each of the components and include the component 
code in the web page (or online graphics application). 
    
One may be able write bare X3D or XAML code for small 
components. However, for many large components, this 
may be impractical. It is highly desirable to use a reusable GUI Class as shown
  in the listing#1. For example, the code for large 
components (e.g.  interactive
charts, trees, dials, meters 
and maps), the bare XML graphics instructions/code runs 
in to thousands of lines, which further may require 
complex calculation based on the custom real-time data 
(or for AJAX updates). Don’t forget, it might 
require complex application logic to get the custom 
data (e.g. based on each user's preferences and profile) 
from databases or live data sources.  
			 | 
		 | 
			
	
		| 
 One
or more GUI components may be included in the webpage as shown in above Fig#2 
Then implement
Simple Integration-logic code at server (e.g. in JSP) for generating
communication code, so that the GUI components can exchange data/events at
client
		  |  
		| 
  
		
  |  
		| 
 Figure#3
		  |  
	 
			 | 
			 | 
		| How do you integrate any two GUI-Components? | 
			 | 
			| 
 Imagine 
that you display two GUI-components (which are created using Windows GUI-API 
and VB or VC++) in your desktop application’s window. 
If you cannot integrate (e.g. implement communication code) the components that are displayed 
in the application window, how can you build any application? 
Isn’t it impossible? 
			 | 
		 | 
			| 
	
			 | 
			 | 
			| 
 Imagine, 
if there is no way that you could set a callback to 
any GUI-component, how can you integrate any two GUI-components 
in your VB/VC++ application. If you press the button, 
nothing would happen, because it cannot communicate 
the user event to any other component. Therefore, a 
viable GUI-class must support a mechanism to integrate 
the components. 
			 | 
			 | 
			| 
 Furthermore, 
if the other component does not support a method to 
accept the request, how can the callback-function send 
the message? Therefore, the GUI-classes/components should 
support (A) mechanisms to set callbacks (i.e. register 
one or more event notify functions) and/or (B) export 
methods for the external code to communicate, for example 
to request its services. 
			 | 
			 | 
			| 
 Pioneer-soft 
invented simple and elegant technique to integrate the 
components in the web application (or subcomponents 
in a large component). We have perfected the concepts 
and process over the years to make it extremely simple. 
The reusable GUI-Objects that run on the server can 
provide necessary information and capabilities to integrate 
the component. 
			 | 
			 | 
			| 
 One 
such mechanism is given below (we have many other simpler 
mechanisms). For Example, you have displayed Radio-button 
group and wish to update the stock-quote, if user selects 
a new ticker-symbol. 
			 | 
			 | 
			
How do you integrate Two VB/VC++ Components?  
Sample VB/VC++ pseudo code to integrate two GUI components 
in the traditional GUI applications (e.g. Windows or Unix/Motif):
				 | 
				 | 
		| 
 Write 
a callback function as shown below, which calls the 
service method of other component to update its status, 
upon the user selection of new item. 
			 | 
				 | 
				
				
				
				
Function VB_RadioGroup_callback(
new_selection_ticker) { 
  // The code to Communicate with other component: For example: 
  Stock_Quote_Obj.display_new_comp (new_selection_ticker); 
} 
// Then register the callback for the Radio Button Group. 
// The code to register the function VB_RadioGroup_callback 
// as a callback to the Radio-button group: 
Radio_Group_obj.setCallback (VB_RadioGroup_callback);
				 |  
				  
				 | 
				 | 
				| Likewise, our IL (Integration Logic) in the JSP file looks like the following; | 
				 | 
				 
					
						 
// The simple yet great innovative TWIST of IL ('Integration Logic') that runs at server: 
//  The JSP includes communication code, so that, components to collaborate with each other  
<script> 
Function  Online_RadioGroup_callback( new_selection_ticker) { 
// The code to Communicate with other component (e.g. inform the user selection). 
//Request the name of the Service-function of the component (In the generated code) 
<%=Stock_Quote_Obj.display_new_comp()%>(new_selection_ticker);%> 
} 
</script> 
<%  // Include the component-code in the web-page (Notice the double quotes) 
Radio_Group_obj.setCallback(“Online_RadioGroup_callback”); 
// This would make the Radio-button-group to call the Callback. 
%>
						 |  
					  
			 | 
			 | 
			| 
 The 
online-GUI-classes support rich set of methods to set 
callbacks. Also, the online-GUI-classes support rich 
set of service-methods to request the services of the 
components. Upon the user event, one component may call 
the service method of the other component. This is not 
that much different than the traditional-GUI component 
integration. (See comparison table at the end of this webpage)  
			 | 
			 | 
			
			
				| 
 JSP Code runs at server 
				 | 
				
 Webpage code runs at Client
				  |  
				 |  
				| 
 Note:
 Upon an event on AC2, the AC2 calls the callback
(Blue-dotter-arrow
in above figure). The callback calls the service method of AC1 (Red-dotter-arrow
in above figure)
				  |  
			 
			 | 
			 | 
			 | 
			| 
 Note: 
The Integration-logic on server has only 4 lines code 
(and rest is just comments to explain it). In fact, 
in this case, it can be written in just one line: The 
following line is equivalent to the above IL code. (a).Get service method of
Stick_Quote_obj, then (b) make the Radio_Group to call
the service-method. In this case, the GUI-Class includes necessary code in the 
AC for the Radio-Group to call the given function.  | 
                    
			 | 
                     
                       
                          
                             
                                
<% Radio_Group_obj.setCallback (
Stock_Quote_Obj.display_new_comp());%> 
                                  | 
                             
                           
                          | 
                    
			 | 
                     
                      This 
directly registers one component’s service method 
as the callback for the other component. Therefore, 
the process to integrate any two GUI-components in the 
web page (that are generated using reusable GUI-API), 
is not that much different from integrating any two 
GUI-components in the traditional desktop GUI-applications.  | 
                    
			 | 
                     
                      One 
could use GUI-objects to create components and place 
any number of GUI-components (e.g. 5 or 500) in the 
web page as shown in the Fig#2. Then use the Integration 
logic process outlined (e.g. Fig#3) to integrate them.  | 
                    
			 | 
                     
                      Notice:
                          Raju's reusable GUI-Classes not only support a method to generate 
code to present the component, but also support functions 
to facilitate the integration of the generated components, so that the
                          components can collaborate with each other.  | 
                    
			 | 
			| 
 Can you name any reason it won’t work? 
			 | 
			| 
 We have many examples to prove this not only works, 
			 | 
			| 
 but also offers far more flexible than traditional GUI paradigm. 
			 | 
		 | 
		
		| 
 
SUMMARY:
Comparison between 
Raju's GUI-API
Framework and The
Traditional desktop GUI-API Frameworks  | 
		 
		| 
 Actions
In The Traditional   GUI-API Framework
		  | 
		
 Corresponding
Actions for   Our Online GUI-API Framework
		  |  
		| 
 The
application developers instantiate and initialize each GUI Object. Then request the GUI Objects to present their GUI Components 
		 | 
		
 The
application developers instantiate and initialize each GUI Object (Listing#1). Then request the
GUI Objects to  generate code-block  to present their GUI Components (Fig#2) 
		 |  
		| 
 
If
two or more GUI components in the application need to collaborate or communicate,
the developers implement required communication code for
the components to collaborate with each other. 
		 | 
		
 If
two or more GUI components in the application (e.g. webpage) need to collaborate or communicate,
the developers implement code at server, which generates communication code  for the components
to collaborate with each other. (Please see Figures #3) 
		 |  
		| 
  Therefore,
Raju's GUI-API is "functionally equivalent" to the traditional GUI-API
		  |  
	 
		 |