Latest Oracle Dynamic Tabs Shell (Dynamic Tabs UI Shell ) Source/JAR

Hi,
Please can any body provide the link where i can get the Latest Oracle Dynamic Tabs Shell (Dynamic Tabs UI Shell ).
Reg,
Brahma B.

Hi John,
Thanks for your reply..
I got the jar for UI Shell from the link you have provided. Here am trying to create my own TabContext by extending the existed one in the jar file.But jar contains the Tabcontext as final so am not able to extend and create my own CustomTabcontext.
While i started working with tabcontext i got the source of UI Shell(first version) and i added some code in Tabcontext itself for achieving some functionality as per the requirement like dirty checking and displaying the dailog like Do you want save changes with some buttons. Now i want to use the latest Ui Shell Tab By including by code as well.
Please can you give any suggestion how can i proceed here.
Reg,
Brahma B.

Similar Messages

  • ADF: Tab needs to be refreshed when I revisit the tab with Dynamic Tab shell

    Hi ADF Experts,
       we are using dynamic tab shell template in our project.I have many tabs opened in page ,When I navigate from one tab
    to another tab , current tab needs to be refreshed.
    when I navigate from tabs below mwthod will execute.
      public void tabActivatedEvent(ActionEvent action)
        RichCommandNavigationItem tab =
          (RichCommandNavigationItem) action.getComponent();
          Integer tabIndex = (Integer) tab.getAttributes().get("tabIndex");
          List<Tab> tabs = getTabs();
          Tab currTab = tabs.get(getSelectedTabIndex());
          if (currTab.isDirty())
            //JRS set the dirty tab as the current tab, so when the dialog handles 'YES'
            // it will be getting the correct tab index to close
            setSelectedTabIndex(getSelectedTabIndex());
            _showDialog(getTabDirtyPopup());
            return;
        setSelectedTabIndex( tabIndex);
      public void setSelectedTabIndex(int index)
        _tabTracker.setSelectedTabIndex(index);
        initTrackTabDirty();
        refreshTabContent();
      public void refreshTabContent()
        AdfFacesContext.getCurrentInstance().addPartialTarget(getTabsNavigationPane());
        AdfFacesContext.getCurrentInstance().addPartialTarget(getContentArea());
    Help me if anyone knows how to achieve this.
    Thanks in advance.

    Hi,
    well, you refresh the tab but not its data. To refresh the data displayed in the tab you need to reset the region. For this, on the af:region reference of the tab, you need to call the "refresh()" method
    Frank

  • Lauching default Tab in Dynamic Tab shell

    Guys,
    I'm using dynamic tab shell. In Dynamic tab shell, we used to launch a tab by clicking on the task on the navigation.
    But i have a requirement, when the application loads, a tab needs to launched by default. How can i do it?
    Thanks in advance

    Hi,
    This you can call the LaunchActivity through server listener in onload of your screen.
    If your having the UIShell API Means you can mention statically which task flow you want load in the first region of the UIShell. You can see below snippet.
    Tabs()
    for (int i = 0; i < TabContext.__MAX_TASKFLOWS; i++)
    tabs.add(new Tab(i, TabContext._BLANK));
    *if(i==0) {*
    Tab tab = getTabs().get(i);
    tab.setTitle("Main Page");
    tab.setActive(true);
    tab.setTaskflowId(TaskFlowId.parse("/WEB-INF/TF/Home.xml#Home"));
    setNumRendered(getNumRendered() + 1);
    setSelectedTabIndex(i);
    As per UIShell Tabing concept in Tabs constructor only first for all region will be filled with the Empty task flows. instead of loading the empty task flow you can specify the task flow which you want to load.
    Reg,
    Brahma B.

  • Changing tab name dynamically

    Hi All
    i've four tab pages in a portal page and i want to change the labels of these tab pages dynamically taking data from table.
    for example i've a table named TAB_TITLES with thest columns TAB_ID,TAB_NAME
    there are four rows
    TAB_ID TAB_NAME
    1 Tab-1
    2 Tab-2
    and so on
    i want to read values from this table and put the tab label in oracle portal page having tabs.
    thanks

    So .. ?
    You should have some expression of problem, information of your attempt, question about something or request for help. I do not see anything in this message like this, although it is also posted twice for no reason.
    so help others in assisting you my friend; or otherwise help yourself!

  • Changing tab title dynamically

    Hi All
    i've four tab pages in a portal page and i want to change the labels of these tab pages dynamically taking data from table.
    for example i've a table named TAB_TITLES with thest columns TAB_ID,TAB_NAME
    there are four rows
    TAB_ID TAB_NAME
    1 Tab-1
    2 Tab-2
    and so on
    i want to read values from this table and put the tab label in oracle portal page having tabs.
    thanks

    So .. ?
    You should have some expression of problem, information of your attempt, question about something or request for help. I do not see anything in this message like this, although it is also posted twice for no reason.
    so help others in assisting you my friend; or otherwise help yourself!

  • Why data are not getting poulated in dynamically added tab in a tab navigator???

    Hi All,
    I am facing a very strange problem and need you expert opinion on this. Ok so the problem goes like this:
    In my application i have a tab navigator where i have 2 fixed tabs say tab A and tab B. In tab B I have a data grid where All the user name are getting populated. Once the user clicks on any datagrid row i am dynamically adding a new tab based on username , so if in my datagrid u1,u2 and u3 are getting displayed then once you clik on u1 a new tab called u1 is getting displayed. Code for this goes like this:
    var vbox1: VBox= new VBox();
    box1.label=mydatagrid.selectedItem.uName;
    var sde:* = new searchDetails();
    vbox1.addChild(sde);
    myTabnavigator.addChild(vBox1);
    Application.application.searchdetails.displayall();
    I have created a component called searchDetails where i have designed the page wit various fields for this tab.This also has a method called displayall() which is populating the data in all fields using php an my sql where i have designed the page wit various fields for this tab.
    New tab is getting displayed perfectly. My problem is once the tab is getting displayed fields are not getting populated with data.
    Please let me know what wrong i am doing. I am really struggling

    Hmm.. you have to assign text to the labelfields on creation complete not before that, the fllow will be like this
    var vbox1: VBox= new VBox();
    var sde:* = new searchDetails();
    vbox1.addEventListener(creationcompleteevent,function);
    vbox1.addChild(sde);
    myTabnavigator.addChild(vBox1);
    function(e:event):void{
    box1.label = "text";

  • Dialog title to depend on tab name dynamically....

    Hi,
    I have an application which has a tab(Phones) and tab has a Jtable with some data.
    When i press Lookup button the first tab-Jtable loads .
    When i right click on a cell in the table, the corresponding row first coloumn value is shown through a dialog.
    Now in the dialog the title is "Shakin", i want the dialog title to be dynamic depending on the tab(name) it is clicked i.e it depends on the tab names (like in this case Phones).
    If someone click a cell in table of first tab(Phones) then the dialog title should also be Phones.
    In future if i add more tabs then each tab would have dialog and each dialog title would depend on each corresponding tab name.
    Can somebody suggest be what to do?
    Below is the code....
         package alignment;
    * @author K
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.Arrays;
    import java.util.Vector;
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTabbedPane;
    import javax.swing.JTable;
    import javax.swing.event.TableModelEvent;
    import javax.swing.table.DefaultTableModel;
    public class TestJava extends JFrame {
         DefaultTableModel mtm;
         JTabbedPane tabbedPane = new JTabbedPane();
         JPanel phones = new JPanel();
         JScrollPane scroller = new JScrollPane();
         JPanel p = new JPanel(new BorderLayout());
         JPanel topPanel = new JPanel();
         JButton lookup = new JButton("Lookup");
         JTable table = new JTable();
         Dbi di;
         String[] columnNames = { "full name", "HP-URL", "address" };
         Vector cnv;
         Vector dbResult;
         public TestJava() {
              setDefaultCloseOperation(EXIT_ON_CLOSE);
              mtm = new DefaultTableModel(columnNames, 2);
              cnv = new Vector<String>(Arrays.asList(columnNames));
              table = new JTable(mtm);
              final JOptionPane pane = new JOptionPane("", JOptionPane.PLAIN_MESSAGE,
                        JOptionPane.INFORMATION_MESSAGE);
              final JDialog d = pane.createDialog(null, "Shakin'!");
              d.setModal(false);
              d.pack();
              table.addMouseListener(new MouseAdapter() {
                   public void mouseClicked(MouseEvent me) {
                        if (me.getButton() == me.BUTTON3) {
                             int row = table.rowAtPoint(me.getPoint());
                             Object value1 = table.getValueAt(row, 0);
                             // JOptionPane.showInputDialog(value1,"Value is " + row);
                             pane.setMessage(value1);
                             if (!d.isVisible())
                                  d.setVisible(true);
              scroller = new JScrollPane(table);
              topPanel.add(lookup);
              phones.add(scroller);
              tabbedPane.addTab("Phones", phones);
              p.add(topPanel, BorderLayout.NORTH);
              p.add(tabbedPane, BorderLayout.CENTER);
              setContentPane(p);
              pack();
              di = new Dbi();
              lookup.addActionListener(new ActionListener() {
                   public void actionPerformed(ActionEvent e) {
                        fetch();
                        table.tableChanged(new TableModelEvent(table.getModel()));
                        if (pane != null) {
                             pane.setMessage("");
                        table.repaint();
         public void fetch() { // time-consuming task should be run
              Thread t = new Thread() { // in a separate thread
                   public void run() {
                        dbResult = di.getQueryResult("QUERY!!!!!");
                        mtm.setDataVector(dbResult, cnv);
              t.start(); // actionPerformed() immediately returns, not blocking GUI
         public static void main(String[] args) {
              TestJava frame = new TestJava();
              frame.setVisible(true);
    class Dbi { // make it a separate public class
         public Vector<Vector> getQueryResult(String query) {
              Vector<String> v1 = new Vector<String>();
              Vector<String> v2 = new Vector<String>();
              Vector<String> v3 = new Vector<String>();
              Vector<String> v4 = new Vector<String>();
              v1.addAll(Arrays.asList(new String[] { "Tim Marshall",
                        "http://tim.marshall/", "Never never land" }));
              v2.addAll(Arrays.asList(new String[] { "Com Commercial",
                        "http://com.comcom/", "Land of gold" }));
              v3.addAll(Arrays.asList(new String[] { "Love Lovable",
                        "http://love.neverhate/", "Sun lotus state" }));
              v4.addAll(Arrays.asList(new String[] { "War Monger",
                        "http://war.momongers/", "Fire and ice city" }));
              Vector<Vector> v0 = new Vector<Vector>();
              v0.add(v1);
              v0.add(v2);
              v0.add(v3);
              v0.add(v4);
              return v0;
    }Thanks

    Use a ChangeListener, it fires every time a new tab is selected.

  • Dynamically Adding/Editing/Deleting Tabs on Tabbed Panels

    I am using the tabbed panels and need to know how to
    dynamically create a new tab with javascript with some content
    inside ( and switch to it ). Also, I need to figure out how I can
    delete tabs at "runtime"? I have tried many things to do this, but
    everytime, it has been failing. I need a functions just like this:
    addTab(title, innerHTMLcontent);
    deleteTab(currIndex);
    Also, I think all of the Spry Widgets should have an easy way
    to dynamically change content.

    Hi,
    here is the js file. I am also attaching a sample (I named it
    as Spry.Widget.ExtendedTabbedPanels, may be you could change it).
    Let me know if you face any issues.
    ===================START-JS
    FILE==============================
    var Spry; if (!Spry) Spry = {}; if (!Spry.Widget) Spry.Widget
    = {};
    Spry.Widget.ExtendedTabbedPanels = function(element, opts) {
    Spry.Widget.TabbedPanels.call(this, element, opts);
    Spry.Widget.ExtendedTabbedPanels.prototype = new
    Spry.Widget.TabbedPanels();
    Spry.Widget.ExtendedTabbedPanels.prototype.constructor =
    Spry.Widget.ExtendedTabbedPanels;
    Spry.Widget.ExtendedTabbedPanels.prototype.addTab = function
    (tabname, tabcontent, position) {
    var tabs = this.getTabs();
    if((!position && position != 0)|| position >
    tabs.length)
    position = tabs.length;
    var newtab = tabs[tabs.length - 1].cloneNode(true);
    this.setElementNodeValue(newtab, tabname);
    this.getTabGroup().insertBefore(newtab, tabs[position]);
    var tabContents = this.getContentPanels();
    var newContentPanel = tabContents[tabContents.length -
    1].cloneNode(false);
    newContentPanel.innerHTML = tabcontent;
    this.getContentPanelGroup().insertBefore(newContentPanel,
    tabContents[position]);
    this.addPanelEventListeners(newtab, newContentPanel);
    this.showPanel(position);
    Spry.Widget.ExtendedTabbedPanels.prototype.removeTab =
    function(tabindex) {
    var tabs = this.getTabs();
    if((tabs.length == 1) || (!tabindex && tabindex !=
    0) || tabindex >= tabs.length)
    return false;
    var tabToRemove = tabs[tabindex];
    this.getTabGroup().removeChild(tabToRemove);
    var contentPanelToRemove =
    this.getContentPanels()[tabindex];
    this.getContentPanelGroup().removeChild(contentPanelToRemove);
    this.removePanelEventListeners(tabToRemove,
    contentPanelToRemove);
    if(this.getCurrentTabIndex() == tabindex) {
    if(this.getTabs().length <= tabindex)
    this.showPanel(this.getTabs().length - 1);
    else
    this.showPanel(tabindex);
    Spry.Widget.ExtendedTabbedPanels.removeEventListener =
    function(element, eventType, handler, capture)
    try
    if (element.removeEventListener)
    element.removeEventListener(eventType, handler, capture);
    else if (element.detachEvent)
    element.detachEvent("on" + eventType, handler);
    catch (e) {}
    Spry.Widget.ExtendedTabbedPanels.prototype.removePanelEventListeners
    = function(tab, panel)
    var self = this;
    Spry.Widget.ExtendedTabbedPanels.removeEventListener(tab,
    "click", function(e) { return self.onTabClick(e, tab); }, false);
    Spry.Widget.ExtendedTabbedPanels.removeEventListener(tab,
    "mouseover", function(e) { return self.onTabMouseOver(e, tab); },
    false);
    Spry.Widget.ExtendedTabbedPanels.removeEventListener(tab,
    "mouseout", function(e) { return self.onTabMouseOut(e, tab); },
    false);
    if (this.enableKeyboardNavigation)
    // XXX: IE doesn't allow the setting of tabindex
    dynamically. This means we can't
    // rely on adding the tabindex attribute if it is missing to
    enable keyboard navigation
    // by default.
    // Find the first element within the tab container that has
    a tabindex or the first
    // anchor tag.
    var tabIndexEle = null;
    var tabAnchorEle = null;
    this.preorderTraversal(tab, function(node) {
    if (node.nodeType == 1 /* NODE.ELEMENT_NODE */)
    var tabIndexAttr = tab.attributes.getNamedItem("tabindex");
    if (tabIndexAttr)
    tabIndexEle = node;
    return true;
    if (!tabAnchorEle && node.nodeName.toLowerCase() ==
    "a")
    tabAnchorEle = node;
    return false;
    if (tabIndexEle)
    this.focusElement = tabIndexEle;
    else if (tabAnchorEle)
    this.focusElement = tabAnchorEle;
    if (this.focusElement)
    Spry.Widget.ExtendedTabbedPanels.removeEventListener(this.focusElement,
    "focus", function(e) { return self.onTabFocus(e, tab); }, false);
    Spry.Widget.ExtendedTabbedPanels.removeEventListener(this.focusElement,
    "blur", function(e) { return self.onTabBlur(e, tab); }, false);
    Spry.Widget.ExtendedTabbedPanels.removeEventListener(this.focusElement,
    "keydown", function(e) { return self.onTabKeyDown(e, tab); },
    false);
    Spry.Widget.ExtendedTabbedPanels.prototype.setElementNodeValue
    = function(element, nodevalue) {
    var currentElement = element;
    var tmpElement = this.getElementChildren(element);
    while(tmpElement.length != 0) {
    currentElement = tmpElement[0];
    tmpElement = this.getElementChildren(tmpElement[0]);
    currentElement.innerHTML = nodevalue;
    ====================END JS
    FILE==================================
    ===================SAMPLE
    TEST===================================
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
    Transitional//EN" "
    http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="
    http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html;
    charset=utf-8" />
    <title>Untitled Document</title>
    <link href="SpryAssets/SpryTabbedPanels.css"
    rel="stylesheet" type="text/css" />
    <script src="SpryAssets/SpryTabbedPanels.js"
    type="text/javascript"></script>
    <script src="SpryAssets/SpryExtendedTabbedPanels.js"
    type="text/javascript"></script>
    </head>
    <body>
    <div id="TabbedPanels1" class="TabbedPanels">
    <div class="TabbedPanelsTabGroup">
    <span class="TabbedPanelsTab"
    tabindex="0"><b>Tab 1</b></span>
    <span class="TabbedPanelsTab" tabindex="0">Tab
    2</span>
    </div>
    <div class="TabbedPanelsContentGroup">
    <div class="TabbedPanelsContent">Content 1</div>
    <div class="TabbedPanelsContent">Content 2</div>
    </div>
    </div>
    <input type="text" id="tabname" />
    <input type="text" id="tabcontent" />
    <input type="text" id="position" />
    <input type="button" value="add tab" onclick="add();"
    />
    <input type="button" value="delete tab"
    onclick="TabbedPanels1.removeTab(parseInt(document.getElementById('position').value));"
    />
    <script type="text/javascript">
    <!--
    var TabbedPanels1 = new
    Spry.Widget.ExtendedTabbedPanels("TabbedPanels1");
    function add() {
    var tabTitle = document.getElementById("tabname").value;
    var tabcontent = document.getElementById("tabcontent").value;
    var position = document.getElementById("position").value;
    TabbedPanels1.addTab(tabTitle, tabcontent,
    parseInt(position));
    //-->
    </script>
    </body>
    </html>
    ===================SAMPLE TEST
    END=======================

  • How to handle tab change event in UI shell main area

    Hi,
    I have two tabs(two taskflows) in UI shell main area. one is department tab and another is employee tab. My department tab shows employees department wise. On employee tab I have emplyee table which shows employees jobwise. This employee table has the functionality of adding new record to employee vo as well.
    Now i follow these steps.
    1. by defualt department tab is open.
    2. by clickinng on Tasks menu link i open Employee tab in to main area. Now i have both tabs in main area.
    3. at Employee tab I search all employees job = accountant. It shows the search result well.
    4. Now i add a new record to it and without saving/deleting this record i move to department tab.
    5. at Department tab i search employees where department =20, here no relation b/w job and department.
    6. Now i return to employee tab. my newly added record got disappeared. It is there but does not show in table.
    How to resolve it??
    I have one solution in my mind while changing the tab i can prompt to user "you can not leave the newly added record..either save it or delete it". But how to catch tab change event here? where i can write code to prompt msg to user?
    Pls help.
    Edited by: 900997 on May 6, 2012 4:10 AM

    With apologies for the slow reply, I'm currently travelling.
    Two things to note:
    1) The af:document uncommittedDataWarning flag was designed to stop users navigating away from half entered records. More about this flag can be found here:
    http://docs.oracle.com/cd/E23943_01/web.1111/b31973/af_orgpage.htm#CACDDDFH (see point 4)
    http://www.oracle.com/technetwork/developer-tools/adf/unsaveddatawarning-096556.html
    ....please note our documentation from time to time spells this flag wrong with only one "t" in the word committed, so if you're attempting a bulk search check for this (and I'll raise document bugs to get this fixed in the future).
    2) On addressing the ADF UI Shell, if you're switching between "pages" in the UI Shell, as separate to switching between dynamic tabs within a single page using the UI Shell, the UI Shell will actually restart the currently running task flow in the page you're returning too. You can verify this by implementing an initializer on your task flow with a log message, and watching when the initializer is called.
    In addressing your last question, at this stage I think you need to assess my first answer then come back if you think you sill need to execute the code on the tab click. I also need to know are you talking about the primary level of tabs that represent each page in the UI Shell, or are you referring to the dynamic tabs within a single UI Shell page that hold your task flows?
    CM.

  • Skinning UI Shell selected Tabs

    Hello everybody. I've been skimming through the net a while for a simple but yet annoying problem.
    We've built our webapp based on the UI Shell architecture: http://www.oracle.com/technetwork/developer-tools/adf/uishell-093084.html
    Everything works great and our styles are fine as well, but there is one small problem. Older monitors lack contrast, so our tabs are not distinguishable from the background.
    http://img211.imageshack.us/img211/5184/pic1sn.png
    http://img140.imageshack.us/img140/171/pic2md.png
    As you can see, I've tried to work with the style sheet and set the panelTabbed background color to Orange. It shows up(very ugly) on the wrong tab. The "main" tab isn't rendered this way. So obviously my skinning didn't apply to this one.
    This is the root tag of the .jspx file: +<af:document id="d1" theme="dark">+
    This is in my customCSS file:
    af|panelTabbed::tab:selected
    +{+
    color:Yellow;
    background-color: Orange;
    cursor: crosshair;
    +}+
    Any ideas, why only the one tab renders the orange, the main one however doesn't?

    Okay so I made some progress with this but still can't quite figure out exactly how to get the look I want.
    I modified the .css file:
    af|navigationPane-tabs::tab:selected af|navigationPane-tabs::tab-start{
    background-color: red;
    However it doesn't set the tab itself to be red but rather the area behind the tab. It doesn't do anything if I set color:red;
    This is how it looks atm:
    http://img211.imageshack.us/img211/6329/tabbed.png
    As you can see, the red isn't supposed to be behind the tab but rather the selected tab itself should be red. I know I will have to set tab-content and tab-end as well, but thats not whats important.
    Here's also a firebug screenshot:
    http://img819.imageshack.us/img819/426/firebugh.png
    Any ideas how to get the "tab content background" or whatever one should call it to be skinned?
    Any help is greatly appreciated!
    Thanks,
    Pascal

  • How can I customize the UI shell close tab behaviour?

    I am using JDevelepor 11.1.2.1.0 Version
    I Am New In ADF
    How can I customize the UI shell close tab behaviour? When i close the tab I ned to rollback the transaction else where when reopen the taskflow it show an error message duplicate key..
    So how i can handle?

    Download the sample at http://www.oracle.com/technetwork/issue-archive/2012/12-mar/o22adf-1518265.html . frank states -
    The CustomerOrdersCRUD-btf task flow in the BoundedTaskFlows.jws workspace accompanying this sample, for example,
    uses the tabContext reference to close the tab displaying the task flow upon rollback and commit—which also is when the task flow is exited.
    In addition, when data changes are performed within a task flow, the tab’s dirty state is changed to indicate to the template that the tab title needs to be shown in italics.

  • App Tabs. My app tabs have dissapeared with the latest update. 4.0Beta5. The option to make a tab an app tab and my previous app tabs have dissapeared.

    see above. When I rebooted Firefox my App Tabs . My app tabs have disappeared with the latest update. 4.0Beta5. The option to make a tab an app tab and my previous app tabs have disappeared.

    App Tabs are stored in sessionstore.js as part of the session data, so make sure that session restore is enabled and working.
    This can be a problem with the file [http://kb.mozillazine.org/sessionstore.js sessionstore.js] in the [http://kb.mozillazine.org/Profile_folder_-_Firefox Profile Folder]
    Delete the files sessionstore.js and sessionstore.bak and any existing files sessionstore-##.js with a number in the left part of the name like sessionstore-1.js .
    See http://kb.mozillazine.org/Session_Restore

  • Overcoming a challenge: combining UI Shell dirty tab + self-closing-BTFs

    I'm finding it difficult to utilise facilities of the ADF UI Shell from self-closing-standalone bounded task flow.
    What the ADF UI Shell does well: from the UI Shell you can open a standalone BTF as an activity, and if the BTF closes itself (ie. given the user selects a ok or cancel/close button, the the standalone BTF navigates to a Task-Flow-Return option), the BTF closes and the ADF UI Shell correctly closes the tab around the activity.
    My challenge is I want to add the ADF UI Shell's "dirty tab" facility to the BTF, such that if the user inside the BTF selects a custom cancel/close button (not the UI Shell close button for tabs) that navigates to the Task-Flow-Return option within the BTF, they get a chance to confirm/cancel the close via the ADF UI Shell dirty tab popup. (Note that the Task-Flow-Return options are critical to self-closing BTFs as they not only give the BTF the chance to commit/rollback, as well as make them re-entrant, or play with the savepoint features.)
    If from the ADF UI Shell shellLauncher bean we call makeCurrentTabDirty method on opening the BTF, the BTF's activity tab is italicized correctly. Yet if the user selects the BTF's cancel button, the BTF closes (it actually disappears from the ADF UI Shell) but the UI Shell activity tab is still visible, then the dirty tab dialog shows, which is too late, the BTF has closed already.
    So my solution at this point is on the BTF close button being pressed, before it navigates to the BTF Task-Flow-Return option, I can get the ActionListener of the BTF close button to raise a Contextual Event to the ADF UI Shell to capture the "Close Event" occurring. The UI Shell then has a chance to show the dirty tab dialog by capturing the Contextual Event.
    My sticking point then is the TabContext class provided in the UI Shell has no way to invoke the dirty tab dialog without calling the removeTab method. It's not desirable for the UI Shell to close the BTF as the BTF's Task-Flow-Return activities must still be called.... remembering they have additional functionality that is required for the BTF.
    Even if the TabContext method did have a solution for displaying the dirty tab dialog without closing the tab (TabContext is easy enough to extend yourself if you have the source code), the problem to which I can't think of a solution is, how to get the dirty tab dialog to communicate the result (yes/no) back to the standalone BTF such that it can make a decision about aborting the close action and leaving the user on the current page fragment, or navigating to the Task-Flow-Return node?
    It might be suggested I could expose the dirty tab dialog to the standalone BTF such that it could show the confirm dialog itself. However the point being is the BTF is standalone, and should not have any knowledge of where it's being used, in the UI Shell or some other application supershell. Publishing the intent to close the BTF via a contextual event seems fine, but alternatively loading in components from the UI Shell seems to break the standalone I-don't-know-or-care-about-what-my-parent-caller-is-doing BTF principle seems on the border of wrong.
    Anybody any pointers, suggestions, or comments like you're-an-idiot-Chris,-do-it-this-way? Your help appreciated.
    Regards,
    CM.
    PS. JDev v11.1.1.2.0 with UI Shell v1.02

    how to get the dirty tab dialog to communicate the result (yes/no) back to the standalone BTF such that it can make a decision about aborting the close action and leaving the user on the current page fragment, or navigating to the Task-Flow-Return node?I hope everyone interested on this challenge will find the application on this link useful: http://soadev.blogspot.com/2010/08/loosely-coupled-bounded-task-flows.html
    Regards,
    Rommel Pino
    http://soadev.blogspot.com

  • Use different "fx-border-image-source" for first tab and remaining tabs

    Hi,
    I'm using something like this
    .tab {
    -fx-padding: 0px 5px -2px 5px;
    -fx-background-insets: 0 -20 0 0;
    -fx-background-color: transparent;
    -fx-text-fill: #c4d8de;
    -fx-border-image-source: url("images/tab5.png");
    -fx-border-image-slice: 20 20 20 20 fill;
    -fx-border-image-width: 20 20 20 20;
    -fx-border-image-repeat: stretch;
    -fx-font-size: 22px;
    .tab:selected {
    -fx-border-image-source: url("images/tab-selected5.png");
    -fx-text-fill: #333333;
         -fx-background-color: red;*/
    to customize the tab appearance of a TabPane.
    That worked well. But I need to use a different set of images for just the first tab. Does anyone know a way to accomplish that?
    Thanks.

    How can I "fix up" the first tab of tab panes that are created after I "fixed up" the first tab of the initial tab pane?
    My app allows user to create new tab panes at any moment during program execution.Not easy to answer this one.
    The best answer would be to use structural pseudoclasses, but (as David points out), they are not yet implemented.
    The trick here is how to identify the first tab of each tab pane so that it can be styled separately from the other panes.
    Doing the styling without a dynamic lookup is preferrable to using a dynamic lookup (i.e. when the first tab is created give it a specific style, e.g. tab0).
    This is how the charts work, where they set style classes based on series of data, e.g. series0, series1 - this allows you to independently style each series of data.
    However the chart stuff has all of that built into the implementation, whereas the tabs don't. To achieve that you would likely need to go into the TabSkin code (http://openjdk.java.net/projects/openjfx/) find out where and how it generates the Tab nodes and write a custom tab skin or extension of the existing one which assigns a numeric style class to each new tab in a pane (e.g tab0, tab1, etc). In other words, not particularly easy if you are unfamilar with the tab skin implementation. You could log a javafx jira feature request to have those style classes set on tabs - file it here => http://javafx-jira.kenai.com.
    In the meantime a simple alternative is to use the dynamic lookup method in my previous post and a hack such that whenever you add a new tab pane to the scene you do something like the following:
    new Timeline(
      new KeyFrame(
        Duration.millis(50),
        new EventHandler<ActionEvent>() {
          @Override public void handle(ActionEvent arg0) {
            Node tab = newTabPane.lookup(".tab");
            if (tab != null) tab.getStyleClass().add("first-tab");
    ).play();The reason for the Timeline is that I don't really know at what stage the css layout pass is executed. I know that when you initially show the stage and then do a lookup, the css pass seems to have already been done and the lookup will work. But for something that is dynamically added or modified after the scene is displayed - I have no idea when the css layout pass occurs, other than it's some time in the future and not at the time that you add the tabPane to the scene. So, the Timeline introduces a short delay to (hopefully) give the css layout pass time to execute and allow the lookup to work (not return null). Not the best or most efficient solution, but should work for you.

  • Is it possible to programatically add tab pages on tab control

    Hi All,
    Is it possible to programatically add tab pages on tab control? If yes then how?
    Thanks & Regards,
    Shrinivas

    Doing this will require the use of VI server and methods and properties.  First, some questions:
    Is the number of pages you may need unbounded?
    Do you have a maximum number of pages you need to display at any one time?
    If the answers are no and yes, then you can create a tab control with the maximum number of pages you need, and hide or show the pages, as necessary. To hide or show pages, use the Pages property to get references to all the pages.  Use Index Array to select the page you want to show/hide, then use its Page Visible property to show and hide it.
    You can also get a lot more dynamic, if you number of pages you need to show at any one time is less than the total number of pages.  In this case, you will want dynamic page contents and tab name.  You can set the tab name by Page Label property of the page (right next to the Page Visible property).  You can make the content dynamic by using a subpanel as the only contents of the page.  You can find out about subpanels in the LabVIEW help or this post.
    You also need to ask yourself whether a tab interface is the best one for your application.  I have usually found that if I need to show and hide a lot of tabs, I would be better off with a subpanel for my content and a text or menu ring the select the content.  Tree controls also work nicely for selection.
    Good luck!  Let us know if you need more help.
    This account is no longer active. Contact ShadesOfGray for current posts and information.

Maybe you are looking for

  • How to send an email in case a Z Table is changed.

    Hi All,           I need some guidance on how to send an email in case a Z Table is changed. Thanks in Advance, Saket

  • DW CS5 - fonts not displaying properly

    Hi there I've just downloaded a trial version of Dreamweaver CS5.5 and seem to be having a little trouble as the fonts on the actual graphic interface are not displaying correctly. Here's what I mean: https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-s

  • Page 404 Error when passing Session values through URL

    The current application I'm working on is a 'Targeted Email Communications' application. Bascially, employees at the school at which I'm employed can go in and select services to recieve outage notification emails on. The problem I'm discussing in th

  • Document Level Reporting

    Hello all, We are on NW 04 7.0 sp11. I have seen many presentations, and know that SAP had been working internally on a release to report on document reads etc. Is this functionality going to be in any release soon? Has someone developed a reporting

  • MAC OS-X Lion and Error 51 - More help needed

    There has been a great thread on this that was previously marked answered and closed.  It refers to the a great article written by Anders Brownworth and includes a link to a tool to decrypt the "shared key" embedded in the PCF file sent by my company