A more successful experiment in creating compositable user interfaces for Config Dialogs

A couple weeks ago I posted an experiment in creating compositable user interfaces using transparent subpanels. The approach might best be described as, "It at least was notable for being novel."
Today, I'm posting another attempt, this one along more traditional lines, and far more successful. Particularly notable: this one can do all the arbitrary composition of the last one AND it solves the TAB order problem.
This solution uses a picture control and renders N copies of a control. When the user tabs to a control or moves the mouse over the control, a real control slides into that position to be able to catch the events (update mouse over draw state, highlight for keyboard focus, handle typing, etc). When the Value Change occurs, a master array of data is updated and the picture control is updated.
This is something that has been attempted in various forms in the past, but there are two aspects of this particular implementation that make it nice:
its programmatic interface for specifying the behavior of the various objects should make it fairly easy for a user of the framework to programmatically generate their dialogs
it handles the TAB problem without flickering, something I haven't seen in other attemps
This idea spawns out of conversation about the previous experiment -- thanks to those of you who posted on various forums, e-mailed me, or, in a couple cases, showed up at my desk. That last one is not something I'm encouraging unless you work at NI... just saying. :-)
Now, this experiement has already yeilded some interesting conversation. We note that as long as controls are instantiated independent of each other -- that is, no property of one control depends upon the property of another control -- this dialog system scales nicely. But in this experiment, I implemented Radio Buttons, which interact with each other -- when one is set True, the others go False. As soon as controls start interacting with each other (such as graying out one control when a checkbox is toggled, or having expandable sections, or really complex cases like updating a graph as some options change, like happens in some Express VI config dialogs) then we start needing ways to refer to the other controls. This rapidly moves us in one of two directions: naming controls or creating references. The naming approach is definitely my preference as it fits better with dataflow and I can do some interesting effects with breaking apart some of the tree. But all of this quickly starts sounding like "Please implement a XAML parser in LabVIEW." For those of you unfamiliar with XAML, in the world of UI design, it might very well be the coolest thing since sliced bread. A XAML string would indeed fit with dataflow, and we could start building that up. I hesitate to head down this road for two reasons. One, as many have noted, there's really not a good XML parsing library written in LabVIEW that can give me a useful DOM tree. Two, that's a huge project and my gut sense is that you'd have to complete a fairly large chunk of it before you'd start seeing any return on investment. But it is worth thinking about -- I might be wrong. Wouldn't be the first time. This code that I've posted today can at least get you started on the generation side if one of you decides to become industrious.
I'm turning my attention away from this project for now... coding in G is lots of fun, and I wish I could spend more days doing it, but this has been a side project and it's time to get back to my assigned projects in text programming. Building a powerful platform for automatic UI generation in LabVIEW would be really useful -- I see lots of requests for this sort of thing, and other languages are pulling ahead of us in this domain.
[UPDATE 5/17/2012 - There is an improved version.]
Solved!
Go to Solution.
Attachments:
ConfighThroughCtrlCreation.zip ‏558 KB

Elijah K wrote:
Thanks for posting this Aristos.  I would normally be one of those to go bug you at your desk, but in case I'm not the only one with this question... which particular flickering problem are you referring to?  The act of switching tabs?  In all honesty, I've never noticed...
When you move controls around on the screen, normally you try to Defer Panel Updates while you do that. But Defer Panel Updates has an effect on control's abilities to catch certain mouse clicks, so when you're trying to move a control to catch the mouse, you have to work a lot without Defer Panel Updates, so if you're adjusting captions, etc, to match the new location, you can see flicker as properties adjust. You can move the control off-screen, as long as you have already updated the picture control to reflect the changes. It took a while to catch all the ways that the flickering can crop up. I think I got 'em all.
Attached are the VIs saved for LV 2009. Actually, they're saved for LV 8.6, but it doesn't work in 8.6 because of a bug in the picture control that existed back then.
Attachments:
ComposableUI_LV2009.zip ‏391 KB

Similar Messages

  • An experiment in creating compositab​le user interfaces for Config Dialogs

    The attached files are saved in LV 2009. They are an experiment. Please don't go off and say, "NI says this is how you should make an options dialog."
    Oh -- I guess I should mention -- this is an experiment in how to make an options dialog that can be reused, extended, and modified for hierarchial systems. In other words, I can create a UI of options for all DAQ cards, then reuse that dialog and append options specifically for M series cards, then reuse that dialog and append options for a specific card. At each level, I can choose to reuse the entire existing set of options, I can reduce or disable certain options, and I can add new options, and when I hit the OK button, out pops a single configuration object for the chosen card.
    That's the goal.
    This experiment achieves some portion of that. I did a lot of work with subpanels with a transparent background.
    I hate the TAB key. I've got no solution to the problem of how to set up the tabbing properly through the controls of these various subpanels. Annoying. And this project did lead me to file an Idea Exchange entry for transparent subpanels: Subpanels with "Make Panel Transparent" enabled should allow mouse clicks to fall through to control...
    To take a look at this experiment, unzip the attachment, open the project file, and open Caller.vi. There are detailed instructions and explanations of what you're seeing on the front panel of that VI. I've put comments in various places throughout. The code is ok quality -- it won't win any awards for following style guidelines, but most of the wires run straight. The whole thing is just to see how far I could go with this approach to compositing interfaces.
    Oh, and if you learn anything from any of this, send a thank you note to user tst. He had an initial framework he was working with, which happened to hit on a day when I was able to spend some time looking into it, and his code inspired me to try this other approach. At the end of it, I don't know how useful this approach will ever be for actual production code, but it is a technique I've never seen anywhere before... perhaps someone out there will be as inspired by my experiment as I was by tst's and will find a way to make this better. Because, honestly, creating an extensible UI framework is a HARD problem, and LV has several approaches that kind of work, but none are particularly great. It would be nice to have a cannonical "this is the way NI and the CLAs say we should write an options dialog".
    And now, having spent some time on "R", I need to get back to the "D" part of R&D...
    Solved!
    Go to Solution.
    Attachments:
    SubpanelEvents3.zip ‏284 KB

    Just throwing out three ideas that could also come in handy here:
    A "Mouse Simulator" API that can simulate mouse clicks/hovers/drags/drops on an object. For this particular application (composite UI), the top-most panel could broker clicks to lower-z-order panels
    Programmatic access to control's z-order as a property (has an Idea been created for this? I would vote for it)
    Make the "Inserted VI" the 'Value' of the SubPanel rather than a 'Property' so you can have an array of SubPanels that contain different UIs. Although I didn't articulate this well, that's why I got excited here.
    a.lia-user-name-link[href="/t5/user/viewprofilepage/user-id/88938"] {color: black;} a.lia-user-name-link[href="/t5/user/viewprofilepage/user-id/88938"]:after {content: '';} .jrd-sig {height: 80px; overflow: visible;} .jrd-sig-deploy {float:left; opacity:0.2;} .jrd-sig-img {float:right; opacity:0.2;} .jrd-sig-img:hover {opacity:0.8;} .jrd-sig-deploy:hover {opacity:0.8;}

  • Problem with "Creating a user interface" ex1_02

    I was going through the exercise for creating a user interface for the Employee Portal and the window is not resizing at all when the window is adjusted. I thought I made a simple mistake somewhere but my code is exactly the same as the solution file which doesn't resize as well. I followed the instructions exactly as described (triple-checked) and tried running the web application in both Mozilla Firefox 6.0 and IE 8.
    The files and instructions mentioned can be found here: http://www.adobe.com/devnet/flex/videotraining/exercises/ex1_02.html
    Thanks in advance.

    Sorry for the delayed response.
    Are you referring to the part of the video where the browser window is resized so that the application content is not contained within the Rect component? If so, this was only shown in the video to demonstrate how the bottom of the Rect component resizes based on the browser, while the contentGroup does not resize based on browser's height.
    In the finished application, you should not see the application's height collapse. However, if you expand your browser, you should see that the Rect component is still constrained to 20 pixels from the bottom of the window.

  • Create unique user accounts for each Oracle process

    hi,
    Please tell me the command to create unique user accounts for each Oracle process
    Thanks

    create unique user accounts for each Oracle processWhat do you mean by unique user account for each oracle process ? Provide more information.
    do you mean create oracle user?
    create user <username> identified by <password> default tablespace <tablespace_name>;
    -Anantha

  • Create unique user profiles for each separate session

    Hi,
    How can I configure TS environment so that each user (who logs onto Windows using the same generic Windows user ID) gets their own unique Windows user profile.
    For example, imagine a scenario where the users are logging onto Windows using the shared user "SYSTEMAPP"
    The intention is to configure the TS server's Windows, so that it creates unique user profiles for each separate session, for example:
    - SYSTEMAPP
    - SYSTEMAPP.000
    - SYSTEMAPP.001
    - SYSTEMAPP.002 (etc...)
    The server version for TS is Windows Server 2012 and not joined to AD. User IDs are created at Local Users and Groups.
    Kindly advise.

    Hi Susie,
    Just to illustrate my point further. Let's say a user logged into the server using user ID SYSTEMAPP for the first session. So, if
    you browse the folders in the server, you'll be able to see this:
    C:\Users\SYSTEMAPP
    Then, another user logged into the same server as SYSTEMAPP user using other session. In this case, my intention is to configure the
    server to create another unique user profile as below:
    C:\Users\SYSTEMAPP.000
    Subsequently, if more users logged in using the same account, the unique counter number will keep on adding...
    C:\Users\SYSTEMAPP.001
    C:\Users\SYSTEMAPP.002
    C:\Users\SYSTEMAPP.003
    Previously, I checked from my third party software vendor that this can be done but I still cracking my head on this which is why led me
    to this forum.
    Kindly advise.

  • I have created separate user accounts for my 2 boys on my macbook. How do i get my itunes library onto their new ipods?

    I have created separate user accounts for my 2 boys on my macbook. How do i get my itunes library onto their new ipods?

    They can't.  Which came first - the chicken or the egg?  Actually, that's a bad comparison but a sync must come first.
    The library is actually part of iTunes and it contains everything.  iTunes is then configured so that you (or they) determine which portion of everything will be synced to each iPod (identified by a unique name, see below for an example of an iPod and an iPad).  iTunes can't make that decision until AFTER it knows which iPods exist.
    By the way, I (you, they) can very easily change the name of each device to whatever I (you, they) wish to call it.

  • HOW TO CREATE A USER-EXIT FOR MB31 GOODS RECEIPT

    Hy,
    <b>HOW TO CREATE A USER-EXIT FOR MB31</b>
    TO COMPARE ORDER QTY CONFIRMED AND GOODS RECEIPT QTY
    ( IF GR QTY GREATER THAN CONFIRMED QTY ERROR MESSAGE SHOULD COME AND NOT ALLOW TRANSCATION TO PROCEED).
    POINTS CONFIRMED.
    REGARDS,
    KARTIKEY.

    Hi Rawat,
       You Don't need to create User Exits,but you need to find user Exits.Below are list of user Exits for MB31.
    Use proper exit as per your requirement.
    Exit Name     Description
    MBCF0002     Customer function exit: Segment text in material doc. item
    MBCF0005     Material document item for goods receipt/issue slip
    MBCF0006     Customer function for WBS element
    MBCF0007     Customer function exit: Updating a reservation
    MBCF0009     Filling the storage location field
    MBCF0010     Customer exit: Create reservation BAPI_RESERVATION_CREATE1
    MBCF0011     Read from RESB and RKPF for print list in  MB26
    MB_CF001     Customer Function Exit in the Case of Updating a Mat. Doc.
    award points if ans is useful.
    Regards,
    Albert

  • How to create Labview User Interface with buttons?

    Hello,
    I try to create a user interface, where the TestStand sequencies can be selected one by one not only Test UUT, Single run and run Mainsequence (about 20 buttons needed).
    I'm playing with the simple UI shipped with TS and can load the sequence file and run automatically a sequence (Main or another).
    How can I create and assign buttons to all sequence files in my TS project?
    Any help would be appreciated.
    Thanks. (TS 4.0, LV 8.0)

    I've modified my main VI with the below steps.
    I still don't know how to create and assign front panel buttons to the user interface.
    Anybody could explain to me how do I need to modify the attached part of my main vi and how to assign buttons.
    Thanks.
    Attachments:
    InteractiveArgs_2.png ‏12 KB

  • How to create a user parameter for a report

    Hi,
    I am writing a report in ORACLE 6.0, and I need to create a user
    parameter for my report.
    My database includes fields: item_id, item_cost, and item_desc.
    What I want to do is: set up a user parameter for item_cost, and
    the report will prompt the user to enter number into this
    parameter, then the report will display item_id and item_desc
    depending the user-entered item_cost.
    thanks.
    Jun

    My SQL code is below:
    select item_id, item_invo, item_desc
    from tb_item
    where item_invo=:p_1
    but I got an error message:
    REP-0788:Warning: The value of restricted LOV parameter p_1 is
    not among the selectedble values.
    Would you help me again? Thanks.
    Jun

  • What r the steps to create task based user interface for interaction center

    Hi all,
                Can any one please let me know the steps to create task based user interface for interaction center? It would be great
                if anyone can share document with step by step.
    Thanks,
    Baasanthi

    Hi all,
                Can any one please let me know the steps to create task based user interface for interaction center? It would be great
                if anyone can share document with step by step.
    Thanks,
    Baasanthi

  • How to create a user class for the customer realm

    how can I create a User class for my custom security realm, please help me out. i am trying to access using the active directory server and iam unable to write a simple classs for this user, can anyone help me. iam a beginner, would appriciate if any one helps me.regardsbaba

    Hi Rawat,
       You Don't need to create User Exits,but you need to find user Exits.Below are list of user Exits for MB31.
    Use proper exit as per your requirement.
    Exit Name     Description
    MBCF0002     Customer function exit: Segment text in material doc. item
    MBCF0005     Material document item for goods receipt/issue slip
    MBCF0006     Customer function for WBS element
    MBCF0007     Customer function exit: Updating a reservation
    MBCF0009     Filling the storage location field
    MBCF0010     Customer exit: Create reservation BAPI_RESERVATION_CREATE1
    MBCF0011     Read from RESB and RKPF for print list in  MB26
    MB_CF001     Customer Function Exit in the Case of Updating a Mat. Doc.
    award points if ans is useful.
    Regards,
    Albert

  • Create a User Interface...

    Somebody can help me or a tutorial for this?
    How can I create a user interface to view listings and search
    results?
    Thank U all

    Hi Anu,
    I've created a set of VIs for Password changes with priveleges for Admin & User logins.
    I've done for normal notepad text files without file extn.
    So, U can easily modify them as per Ur Excel requirement.
    It's a very basic functionality VI set, that it doesnt have the feature of adding Admin Logins while runnig, U've to modify a littlle bit by Urself.
    Pls make sure that the "list" file exists in the Current Working Directory from which U run the Untitledpass.VI.
    This is the top most VI. Run it & explore the features.
    Rgds,
    Partha.
    - Partha
    LabVIEW - Wires that catch bugs!
    Attachments:
    Password1.zip ‏294 KB

  • Creating API User Hooks for Saudi HRMS

    Dear All,
    I want to create API User hooks for Person Extra Information Type,Any one could help me.
    Thanks and regards,

    If you want to learn how a user hook works, you can check the metalink note 73170.1. Or you can visit the following link.This guy has given the whole content in his blog.
    http://shrigupta.blogspot.com/2010/06/understanding-and-using-api-user-hooks.html
    Hope this helps.

  • How to design the user interface for Indesign cs6 plugin ?

    Designing user interface using custom c++ library(SDK) for pluging is very tedious work .so when I search the net than i found that we can do it using Adobe Creative Suite Extension Builder but i dont know how to use it to develop user interface for plugin and to how to enable event handling in this UI .I read lots of document regarding this on net but they all created lots of confusion in my mind  so can anyone help me to know steps which i must follow to develop plugin using this or whatever technology (action script,java script etc)

    If you want to develop Extensions using Creative Suite Extension builder then i think this is not the right forum for you. Please post your specific queries regarding this at the below mentioned link
    http://forums.adobe.com/community/creativesuites/cs_sdk
    To give a brief of how to develop UI using JS you can use ScriptUI to develop your UI, it is a fast and OS independent approach to UI development. The UI created using JS is native in look. You can refer the following link for some help on ScriptUI
    http://www.kahrel.plus.com/indesign/scriptui.html
    I don't have much info regarding development in CS SDK, but i can point you to one more direction of dev called as hybrid plugins wherein the UI is created in CS SDK, and appropriate methods are exposed from the C++ plugin(enhancing the script object model) to be called up by the CS code for too and fro communication between these two modules of code.
    Hope these pointer help you in getting started.
    Thanks,
    -Manan

  • User Interface for bulk loading images using interMedia

    I would like to create an interface where users could bulk load images to a database. Has anyone created a web (or other) interface that would perhaps call a PL/SQL procedure or SQLloader?
    Is there a way for users to upload images from there own computers in bulk? Would they need to utilize SQLPLUS?
    While I have seen the examples and plan to create a web interface for uploading images one at a time, I have been requested to find a way for the users to upload images in bulk themselves (instead of them requesting us technical people to do it).
    Thanks for any suggestions.
    Judy

    <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica">quote:</font><HR>Originally posted by Simon Oxbury:
    Hi,
    There's a sample on OTN that discusses loading multimedia data in bulk into the interMedia types using both SQL*Plus (with PL/SQL) and SQL*Loader. Check out the following URL: http://otn.oracle.com/sample_code/products/intermedia/htdocs/avi_bulk_loading.html
    One major difference to consider between SQL*Loader and SQL*Plus (with PL/SQL) is that SQL*Loader can load data from files on the machine running SQL*Loader, which may be a different machine than the database, although it still needs an Oracle installation. Whereas SQL*Plus with PL/SQL can load data only from directories that are accessible to the database server and that have been defined in the server using the CREATE DIRECTORY command, which requires privs. Also note there are restrictions and issues specific to both NT and Unix when it comes to access network directories from the server.
    If SQL*Loader looks like a possibility, you might want to think about a simple Java program, Perl script, or some such, to create the SQL*Loader scripts. On the other hand, if you get into Java, then you could use Java to do the upload and, at the same time, provide some level of application-specific user interaction and/or error reporting, etc. Its easy to get a list of file names in a directory using the File.list or File.listFiles methods in Java. On the other hand, if we talking LOTs of files, then SQL*Loader may turn out to be more efficient.
    In order to better understand the variety of ways in which our customers are using interMedia, we'd be very interested in knowing a little more about your application, the interMedia functionality that you are using, and how you are developing and deploying your application. If you are able to help us, please send a short email message with some information about your application, together with any comments you may have, to the Oracle interMedia Product Manager, Joe Mauro, at [email protected]. Thank you!
    Regards,
    Simon<HR></BLOCKQUOTE>
    null

Maybe you are looking for