Oracle Forms Look and Feel Project

, , No Comments






Collected from : http://sheikyerbouti.developpez.com/forms-pjc-bean/LAF/doc/Oracle_Forms_Look_and_Feel_project_Old_Versions.htm


Version 1.3.7 comes with the following changes:

·         New documentation in PDF format.

All documents have been re-written in PDF files.


·         New methods added to the DrawLAF Java Bean.

When you resize the canvas that includes the Bean Area, you can inform the Java Bean so that, the gradients can be re-painted with the new dimensions.

   SET_CANVAS_RESIZED
  
   e.g.

   Set_Canvas_Property('CV1', WIDTH, 600);
   Set_Custom_Property('LAF_BLOCK.LAF_BEAN', 1, 'SET_CANVAS_RESIZED', '');


The SHOW_MENU_BAR method has been added to allow the developer to show or hide the entire menu bar.

   Allowed values are true or false.
 
   e.g.

   -- Hide the entire menu bar --
   Set_Custom_Property('LAF_BLOCK.LAF_BEAN', 1, 'SHOW_MENU_BAR', 'false'); 

  See the online documentation

·         New methods added to the XP_LAF_Button PJC

SET_IMAGE_PRESSED, permits to indicate the image painted on the button when it is pressed.
 
SET_IMAGE_DISABLED, permits to indicate the image painted on the button when it is disabled.
 
So the Button can, now, have four images associated:

o        when the mouse enters
o        when the mouse exits
o        when the button is pressed
o        when the button is disable
  
SET_ROLLOVER_MARK, show/hide the orange border when the mouse cross over the button.
 
See the online documentation.


·         Bug correction

o        Nice enhancement from Albert Ellen.
You can, now, have a block split on two canvas - in the case of spread table - correctly painted.
All you have to do is to call two times the Paint_Block() method on the block, once with the bean located on the first canvas,
and once for the bean located on the stacked canvas that displays the spread table items.

Before…

After.


!!! Think to recompile your modules !!!

 
o        Tab canvases have, now, a transparent background.

o        The PopList list item recognize, now the (SHITF+)TAB keys to continue the navigation between items.



Version 1.3.6 comes with the following changes:

·         A Scrolling Image viewer


It is the perfect tool to show images collections like photo albums or commercial catalogs.

You can attach it to four different locations from the bean area:
·         NORTH (current screenshot)
·         SOUTH
·         EST
·         WEST
It offers more than 20 methods to setup and display your images in a scrolling bar. Each small icon can display an HTML tooltip, and the main image will send a message back to Forms when you click it, allowing the developer to attach any functions of his own to the image.
This feature needs its own screen area to display the image viewer, so that you have to add another Bean Area to your canvas with the following Implementation Class:
oracle.forms.fd.ImageViewer

To test it immediately, a new sample dialog - test_laf_image_viewer.fmb - has been added to the /fmb folder of the zip file.
In that folder, you would also find a /icons sub-foldder that contain s the images. In order to have the sample dialog working, you have to copy this folder to your c:/ disk.
If you want to move it to another location, adapt the global variable created in the When-New-Form-Instance trigger:

:GLOBAL.IMAGE_DIR := 'c:/icons/moto-guzzi/' ;


Images can also be read from the database, via a small database package : PKG_LAF
The SQL script to create it is located in the /scripts folder in the zip file.
The procedure to load images from the database is implemented in the sample dialog program unit : LOAD_BLOB_IMAGE, so you will need to create the package in the database in order to compile the sample dialog.



·         Support of MP3 sounds

By just adding a JAR file – from the JLayer 1.0 open source project - to your /forms/java folder (and of course to the archive tag of the formsweb.cfg file), you can, now, play MP3 files through the PLAY_SOUND method.
The JAR file (jl1.0.jar) can be loaded from the following site:


Additionally, the sounds can also be read from the database, via the SET_SOUND_BASE new method.


·         Support of the SET_TEXT_POSITION method in the LAF Fun Button feature while using textual buttons.






Version 1.3.5.1 comes with the following changes:

·         A new method to have multi-stops linear gradients on the canvas


 This method allows the developer to draw complex gradients with more than two colours.

Set_Custom_Property('CTRL.BEAN',1,'ADD_LINEAR_GRADIENT','PosX,PosY,Width,Height,orientation,coefficients,colors,transparency_factor');
   
 PosX and PosY are the upper left corner, and must contain an integer positive value. It also can be the following keywords:

o        WITH
o        WITH/2

 Width and Height are the dimensions of the gradient to be drawn.

 orientation can be UpToDown or LeftToRight

 coefficient should be width1[%][-width2[%][-widthx[%]]]

 If you specify a percentage [%] the gradient will use this percentage to draw each pair of corresponding gradient colours.
 If not specified, the gradient is painted using the real pixel dimension given.

 colors shoulf be RGB pairs : RxGxBx-RxGxBx[-RxGxBx-RxGxBx[...]]

For each coefficient given you should give a pair of colours.

e.g.:

 Set_Custom_Property('CTRL.BEAN',1,'ADD_LINEAR_GRADIENT',
    '0,0,WIDTH/2,HEIGHT,UpToDown,20%-60%-20%,r50g50b50-r255g255b255-r255g255b255-r50g50b50-r50g50b50-r255g255b255,.6');

The first gradient with the first 2 colours is painted on the first 20% of the total size given
The second gradient with the succeeding 2 colours is painted on the next 60% of the total size given
The last gradient with the last 2 colours is painted on the last 20% of the total size given



 The CSS corresponding tag is the following:

gradient-linear:0,0,WIDTH/2,HEIGHT,UpToDown,20%-60%-20%,r50g50b50-r255g255b255-r255g255b255-r50g50b50-r50g50b50-r255g255b255,.6

You can have as many as you want in the CSS file.

The TEST_LAF_LINEAR_GRADIENTS.FMB sample dialog shipped with the zip file use .cvLinearGradients canvas tag of the new forms.css file:

.cvLinearGradients {
     type:canvas
     gradient-linear:0,0,WIDTH/2,HEIGHT,UpToDown,20%-60%-20%,r50g50b50-r255g255b255-r255g255b255-r50g50b50-r50g50b50-r255g255b255,.6
     gradient-linear:WIDTH/2,0,WIDTH/2,100,UpToDown,25%-25%-25%-25%,r99g165b247-r55g153b244-r45g126b235-r48g165b249-r48g165b249-r127g127b255-r127g127b255-r170g127b255,.6
     gradient-linear:WIDTH/2,100,WIDTH/2,100,UpToDown,20%-20%-20%-20%-20%,r255g68b54-r255g172b54-r255g172b54-r255g220b54-r255g220b54-r235g255b54-r235g255b54-r178g255b54-r178g255b54-r93g255b54,.6
      }


·         A last argument has been added to the ADD_IMAGE method

 It allows the developer to add a mirrored image to the given image

This parameter, given after the sensitive image name could be true or false

Set_Custom_Property('LAF_BLOCK.LAF_BEAN', 1, 'ADD_IMAGE',
      '1,http://sheikyerbouti.developpez.com/forms-pjc-bean/LAF/doc/LAF_logo2.jpg,CENTER-IMAGEWIDTH/2,10,.9,-,-,-,true');


See the TEST_LAF_MIRROR_IMAGE.FMB sample dialog shipped with the zip file.




Version 1.3.5 comes with the following changes:

·         Two methods added to the dynamic frame feature

 Draw frame border with gradient

    Set_Custom_Property('CTRL.BEAN',1,' SET_FRAME_BORDER_GRADIENT','start_RGB_color, end_RGB_color[,gradient_direction]’);

    Set_Custom_Property('CTRL.BEAN',1,' SET_FRAME_BORDER_GRADIENT','r250g250b250,r20g20b20');
   
 Draw frame shadow with gradient  

    Set_Custom_Property('CTRL.BEAN',1,' SET_FRAME_SHADOW_GRADIENT', 'start_RGB_color, end_RGB_color[,gradient_direction]’);

    Set_Custom_Property('CTRL.BEAN',1,' SET_FRAME_SHADOW_GRADIENT',' r250g250b250,r20g20b20,LeftToRight');


In both methods gradient_direction can be:

o        LeftToRight
o        UpToDown
o        LeftUpToRightDown
o        LeftDownToRightUp


·         Integration of the non rectangular buttons feature

 It allows the developer to draw non rectangular buttons corresponding to the following shapes:

 . circle
 . square
 . polygones
 . outlined text

 The button Implementation Class must be: oracle.forms.fd.FunButton

See every method in the documentation and run the laf_fun_button.fmb sample dialog shipped with the zip file.


• Bug correction  --

SET_MAX_ROWS method corrected in the Poplist PJC




Version 1.3.4.4 comes with the following changes:

PLAY_SOUND_LOOP method added

 You can play a pre-loaded sound in an infinite loop

  -- load a sound file --
  Set_Custom_Property('CTRL.BEAN',1,'SET_SOUND_FILE','C:/,spacemusic.au');

 -- play the sound --
 Set_Custom_Property('CTRL.BEAN',1,'PLAY_SOUND_LOOP','spacemusic.au');


STOP_SOUND method added

To stop a sound played in an infinite loop

 Set_Custom_Property('CTRL.BEAN',1,'STOP_SOUND','spacemusic.au');

 if this method is used just before exiting the form,
 follow it by a SYNCHRONIZE instruction.


ADD_TEXT modified to accept an item unique name

The second parameter (prompt text) can be preceded by a unique name like the following:

Set_Custom_Property( 'CTRL.BEAN', 'ADD_TEXT', '1,EMP.ENAME^Label,10,10,Arial,plain,12,r100g25b255,.5' );


The separator must be a ^

This unique name could be, thus, used in a SET_TEXT_LABEL() method to modify the label at runtime:

Set_Custom_Property('CTRL.BEAN', 1, 'SET_TEXT_LABEL', 'EMP.JOB,New label);


new SET_TEXT_LABEL method to modify, at runtime, a prompt label defined by the ADD_TEXT method.

The property is a combination of the unique item prompt name given in the ADD_TEXT method (first half)
and the new label following the coma (second half).


• Bug correction  --

add feature that allows having item prompt split on 2 lines with table-block HTML decoration, the item prompts split on 2 lines are, now, well displayed. (but no more than 2 lines)





Version 1.3.4.3 comes with the following changes:



• The ADD_IMAGE method supports some special keywords for the X_Pos and Y_Pos parameters, allowing locating the image depending on the borders of the canvas.

X_Pos can contain:

   . LEFT
   . CENTER
   . RIGHT
   . IMAGEWIDTH
   . IMAGEWIDTH/2

Y_Pos can contain:

   . TOP
   . CENTER
   . BOTTOM
   . IMAGEHEIGHT
   . IMAGEHEIGHT/2  
  
 so you can have locations anchored to a border, independently to the size of the canvas

 e.g.:

 RIGHT-IMAGEWIDTH,BOTTOM-IMAGEHEIGHT/2
 or 
 CENTER-10,TOP-IMAGEHEIGHT/2+10



• The DISPLAY_MESSAGE method has been added to the DrawLAF bean. It sounds close to the Show_Alert() built-in, with no size limitation.

Set_Custom_Property('LAF_BLOCK.LAF_BEAN', 1, 'DISPLAY_MESSAGE','0,0,400,110,/target-32.gif,Title,Message');



• The GET_SCHEME_COLOR and GET_SCHEME_COLOR_LIGHT methods have been added to return the current scheme color and light color in rXgXbX format.



• The SET_FLASH_TEXT method can take both text and text shadow colors, separated by a comma.

Set_Custom_Property('LAF_BLOCK.LAF_BEAN', 1, 'SET_FLASH_TEXT', '30|280|'
       || 'the text to print'
       ||'|500|true|r250g10g10,r125g125b125|SOUND8.WAV');



• The SET_SOUND_FILE method accepts, now, multiple sound files in a single call:

Set_Custom_Property('LAF_BLOCK.LAF_BEAN',1,'SET_SOUND_FILE','/,SOUND5.WAV,SOUND6.WAV,SOUND8.WAV');

The only restriction is that all sounds have to be located into the same given root.






Version 1.3.4.2 corrects a few bugs on the TextField and TextArea beans, and offers a few new methods.



The ADD_IMAGE method has been modified to accept a last argument that can turn the image in a sensitive area.
When the user clicks this image, a message is sent to the Bean Area through its When-Custom-Item-Event trigger, allowing the developer to start an action..

This method has also been modified to accept the special -1 value in place of the width or height argument in the purpose ok keeping the aspect ratio of the scaled image.
See the new ADD_IMAGE syntax in the DrawLAF bean documentation:

A new SET_ALL_HYPER_LINK_COLORS has been added to the DrawLAF bean to set the colors of every hyper link item in a single shot.






Version 1.3.4.1 introduces the Socket Server feature, allowing the Forms module to receive messages from the outside.


On the screenshot, you can see coming asynchronous messages sent by a database trigger.

All you have to do is to open a socket on a given port, and then the Forms module is ready to listen to this port. It is, then, easy to send asynchronous messages from any place.
See the following example that sends a message from the database:

1. Open the port 4450 from the Forms module:

Set_Custom_Property( 'BL.BEAN', 1, 'INIT_SERVER', '4450' ) ;


2. Send a message from the database through this port:

CREATE OR REPLACE TRIGGER TRG_BI_TRACE
  BEFORE INSERT
  ON TRACE
  REFERENCING NEW AS NEW OLD AS OLD
  FOR EACH ROW
DECLARE
  c  utl_tcp.connection;  -- TCP/IP connection to the Socket server
  ret_val PLS_INTEGER;
BEGIN
  c := utl_tcp.open_connection(remote_host => '10.75.19.44',
                               remote_port =>  4450);
  ret_val := utl_tcp.write_line(c, 'Inserted line in table TRACE: ' || :NEW.LIGNE);
  utl_tcp.close_connection(c);
EXCEPTION
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
       RAISE;
END TRG_BI_TRACE;
/

In this sample code, a database trigger is used to send a message each time a row is inserted in the TRACE table (LIGNE is a Varchar2 column of this table).

This way, you do not need any more Forms timer to query the database in an active way, but you can simply be in a passive way, receiving messages from the database (or any external source able to send a message through a socket).

Test it with the laf_socketserver.fmb provided in the /fmb directory of the LAF_1341.zip archive.






Version 1.3.4 does not revolutionize the project, but add a few enhancements.

  • The dynamic menu can, now, support multiple sub-levels.


You can, at runtime add, enable, disable, show, hide and remove menus and menu options of any depth.

The corresponding ADD_MENU and ADD_MENU_OPTION methods have been modified to accept the pointed notation.

  Set_Custom_Property('BL.BEAN', 1, 'ADD_MENU', 'Menu1.SubMenu1,SubMenu1' ) ;

  Set_Custom_Property('BL.BEAN', 1, 'ADD_MENU_OPTION', 'Menu1.SubMenu1.SubSubMenu1.Exit,Exit,Exit-Form' ) ;

The ADD_MENU method needs, now, two arguments:

    • The first one is the menu/menu option internal name
    • The second is the displayed label



·         Dynamic Frames have also been enhanced to display a better frame-title result.



·         Two methods have been added to get a color from a Java JColorChooser:

o        GET_COLORCHOOSER_COLOR to get the color from a JColorChooser
The value is returned as a RxGxBx string.


o        SET_COLORCHOOSER_VALUES to set the JColorChooser initial color (required) and title (optional).
Color must be in RxGxB string format.

   Declare
     LC$Color  Varchar2(12);
   Begin
     -- set color and title to initialize the JColorChooser with --
     Set_Custom_Property('CTRL.LAF', 1, ' SET_COLORCHOOSER_VALUES', 'r200g100b0,Choose a color');

     -- get a color chosen from a JColorChooser --
     LC$Color := Get_Custom_Property('CTRL.LAF', 1, 'GET_COLORCHOOSER_COLOR');

   End; 


·         A third argument has been added to the SET_GRADIENT_COLORS method.

It allows playing with the transparency level of the gradient painted on the canvas background.

The value must be between 0 and 1.

0 corresponds to a full transparent factor (invisible).
1 corresponds to a full opaque gradient.

If this factor, not required, is not provided, the default value is : .2

-- intensive gradient --
Set_Custom_Property( 'CTRL.LAF' 'SET_GRADIENT_COLORS', 'r0g0b0,r255g255b255,.8' );


The corresponding tag in the .CSS file is: gradient-colors of any section of canvas type:

   .maincanvasOracle {
     type:canvas  
     gradient-colors:r51g102b153,r210g216b176,.1
     ...
   }


·         Some people don’t like to see the tiny lines drawn around an item when it has the focus.

A DRAW_FOCUS_LINES method has been added to the DrawLAF.java bean to decide if you want or not draw the item focus lines.

-- do not draw the focus lines on items --
Set_Custom_Property( 'CTRL.LAF' ' DRAW_FOCUS_LINES ', 'false' );





Version 1.3.3.1 adds the StatusBar features, and also corrects a bug with the laf.pll library for table-blocks where all items are not located on the same canvas
(Correction provided by John Vander Heyden).


As you can see on the figure below, the Status bar is divided in 2 lines.
The first line has 2 zones call 1,1 and 1,2
The second lines has 6 zones called 2,1 to 2,6

You can get and set the text of one of these zones with the new:

Set_Custom_Property('bl.bean', 1, 'SET_STATUSBAR_VALUE', 'status_line,status_index,the value' ) ;

For instance, to set the value of the first line, first zone (which is typically the message zone) use the method as follows:

Set_Custom_Property('bl.bean', 1, 'SET_STATUSBAR_VALUE', '1,1,Hello' ) ;

You can get the content of any zone with:

Set_Custom_Property('bl.bean', 1, 'SET_STATUSBAR_INDEX', '1,1' ) ;
V_value := Get_Custom_Property('bl.bean', 1, 'GET_STATUSBAR_VALUE') ;


A REFRESH() method has also been added to the DrawLAF.java bean to allows re-painting the windows after the use of the ADD_IMAGE() method.
When this method is used in a When-New-Firm-Instance trigger, the screen does not have to be refreshed to see the images.
When you use this method in a When-Button-Pressed trigger, the images are not immediately shown. So provide this method just after the ADD_IMAGE() call:

Set_Custom_Property('bl.bean', 1, 'REFRESH', '' ) ;





Version 1.3.3 adds the dynamic menu feature.

You can add menu options to an existing popup menu, add a new popup with its menu options.


The entire current menu is scanned so this is the reason why you can handle existing popup/options, even those provided in the Forms internal standard menu (DEFAULT,DEFAULT&SMARTBAR).

With the current toolbar, you can add, remove, show, hide, enable, disabled any popup or menu option

See the DrawLAF bean properties documentation to get detail of the new methods.

Notice that the naming convention uses the displayed name of popup menus and menu options, so it can change according to your own language setting.

A sample dialog (test_dynamic_menus.fmb) is provided for you to test. You can find it in the /fmb subdirectory of the zip file.





Version 1.3.2 introduces the forgotten Text Item.
Single and multi-line Text Items are, now, taken into account and support the following:

  • Regular Expression validation
  • Cursor and selection handling
  • Hyperlink (single-line Text Item only)
  • Blinking(single-line Text Item only)

In addition, some events can be sent back to Forms through the Tom Cleymans DispatchingBean solution.

You can, now set any Regular Expression pattern to perform complex item validation.
You can get and set the current cursor location and the character selection.
You can blink single-lineText Items.
You can manage Hyperlinks by launching URLs by clicking on them.

 
The text_items.fmb sample module is part of the zip file (/fmb) for you to test.

For a complete documentation on methods you can set/get, see the LAF_XP_TextField documentation and  LAF_XP_TextArea documentation.




Version 1.3.1 is a consolidation of the 1.3 new features.

a. The properties set to menus, window caption bars, status bar, input dialog boxes, dynamic frames and tabs can be initialized, now, from the CSS file.
In one hand, they can inherit some of their properties directly from the current selected color scheme.
In the other hand you can set the global properties for those elements. Global properties are those that are not specifically set at run time.

New tags have been added to the GUI section of the CSS file to store this information:

.GUIPropertiesOracle {
     type:gui
     scheme:silver
     enhanced-lists:true
     tlist-multi-selection:true
     tlist-sorted:false
     tlist-orientation:vertical
     poplist-settimekeyselect:8000

     /*
     /* menu, window caption and status bar */
     /*
     light-color-scheme:true
     menu-use-scheme:true
     window-use-scheme:true
     status-use-scheme:true
    
     /*
     /* tab properties */
     /*
     tab-use-scheme:false
     tab-selected-colors:r255g255b255,r51g102b153
     tab-colors:r0g0b204,r255g255b120    

     /*
     /* dialog properties */
     /*
     dialog-use-scheme:true
     dialog-font:Verdana,14

     /*
     /* frames properties */
     /*
     frame-use-scheme:true
     frame-font:Verdana,B,12
     frame-title-position:top,left
     frame-opaque:false
     frame-background-colors:r0g0b255
     frame-colors:r255g255b0
     frame-gradient-orientation:
     frame-round-border:true
     frame-title-colors:r0g0b255

     /*
     /* other GUI element properties */
     /*
      }     


b. It comes with another new feature that allows handling tab canvas properties at runtime.


You can set the selected, non selected tab colors and font and also put an image.


c. Finally, four methods have been added to the DrawLAF.java bean to put images on application and MDI window caption bars:

  • SET_CURRENT_WINDOW_ICON()
  • SET_WINDOW_ICON()
  • SET_WIN_MDI_ICON()
  • SET_ALL_WINDOWS_ICON()





Version 1.3 provides two new features:

  • Dynamic frames


You can create and handle titled frames at runtime:

·         Creation
·         Set graphical properties
·         Resize/move
·         Show
·         Hide
·         Remove

The frame title can be located on the 4 sides of the frame box with left, center, and right alignment.

See the DrawLAF Bean properties documentation to get all the property settings.

Try it right now with the test_laf_frames_9i.fmb provided in the /fmb directory of the LAF-13.zip file.


  • Input dialog box


Something missing in the standard Forms built-ins set is a very easy way to let the end-user enter a text.
That is what the Input dialog box has been introduced in this version.

It allows displaying a coloured single or multi-line dialog box.
You can set color, position, size and even your own icon.


In addition, a common About box has also been added to show the current LAF Bean version and also the current running JRE version





Version 1.2.1 does not provide any new feature. It only corrects a bug, discovered by Frans Hovenkamp on the Push Buttons.

 

As you can see on the screenshot, buttons overlap the second window opened by the Open_Form() or Call_Form( ..., NO_HIDE) built-ins (Red frame).
This is corrected in this current version (1.2.1), so Push Buttons do not overlap anything now.

However, the caveat still remains on enhanced lists (yellow frames) that are also Swing components.
So and at this very moment, do not use enhanced list if they are supposed to be used in a multi-window application.

For information, enhanced lists are standard Forms list that are enhanced with the Set_Custom_Property( ENHANCED_POPLIST ) method.





Version 1.2 allows modifying some particular element, like menu bar, menu option or status bar.


You can modify Font, foreground color and background color settings for the following element:

  • Single line Text Item
  • Multi-line Text Item
  • Button
  • CheckBox
  • Radio button
  • Tree
  • ComboBox
  • PopList
  • TList
  • Tree
  • Menu Bar
  • Menu Option
  • Status Bar
  • Window title

Corresponding properties can be read from the CSS file, under the gui specific type of tag section:

.GUIProperties1 {
     type:gui
     scheme:purple
     enhanced-lists:true
     tlist-multi-selection:true
     tlist-sorted:false
     tlist-orientation:vertical
     poplist-settimekeyselect:8000
     element1:TextField,Tahoma,B,12,r0g128b255
     element2:Button,Tahoma,B,12,r0g128b255
     element3:CheckBox,Tahoma,B,12,r0g128b255
     element4:RadioB,Tahoma,B,12,r0g128b255
     element5:Tree,Tahoma,B,12,r0g128b255
     element6:ComboBox,Tahoma,B,12,r0g128b255
     element7:Tree,Tahoma,B,12,r0g128b255
     element8:MenuBar,Tahoma,B,12,r255g128b0,r200g255b150
     element9:MenuOption,Tahoma,B,14,r0g185b90,r255g255b150
     element10:Status,Tahoma,B,12,r255g255b255,r0g185b90
     element11:Window,Verdana,BI,16,r255g255b128      
      }

These new tags are read from the PKG_Look_And_Feel. Set_GUI_Properties() laf.pll procedure.
It is, so, easy to change the setting of all items of the current module.



Version 1.1 allows playing sounds and displaying any single or multi-line messages anywhere on the screen, during the number of milliseconds given.
When this time is elapsed, the message is erased from the screen.
A pre-loaded sound can be played as soon as the message is displayed.

 

For further information, read the version.txt in the zip file.

0 comments:

Post a Comment