LabWindows/CVI Idea Exchange

Community Browser
cancel
Showing results for 
Search instead for 
Did you mean: 
Post an idea

While it is possible to add, remove and replace files in a CVI project it is not possible to rename or duplicate a file.

 

This is useful for example if a large source code file shall be split to speed up compilation. Although this file operation could be done outside of CVI associated tags would be lost.

 

A workaround has been offered here but a more elegant and simple solution would be welcome. Hence I suggest to provide two more commands to add and duplicate a file including its associated tags and breakpoints...

 

Thanks.

Sorry for the long message.

My proposals are at the very end of this post

In order to understand the rationales I propose 2 experiments

 

Experiment #1:

In C:\Users\Public\Documents\National Instruments\CVI2013\samples\userint
Open 2yaxis project

 

Here is the code of interrest (lines 131-145):

 

int CVICALLBACK ScaleIt (int panel, int control, int event, void *callbackData,
                         int eventData1, int eventData2)
{
    int val;
    
    if (event == EVENT_COMMIT)
        {
        GetCtrlVal (panel, control, &val);
        SetCtrlAttribute (panel, PANEL_GRAPH, ATTR_ACTIVE_YAXIS,
                          VAL_RIGHT_YAXIS);   
        SetCtrlAttribute (panel, PANEL_GRAPH, ATTR_YMAP_MODE, val);
        SetActiveCtrl (panel, PANEL_GRAPH);
        }
    return 0;
}

 

Set a break point line 141 (second SetCtrlAttribute())
Then comment line 141 with 2 "/" at the beginning of the line of code
Debug the project (SHIFT+F5)
Before the code start, the breakpoint move "automatically" from line 141 to 142

 

Note : This is "OK". Indeed line 141 is no longer executable so it seems reasonable to move the breakpoint to the next valid line of code.

 

When the UIR appears, click on the scale control
Once in the editor, stop the debug session

 

At this point you should see the breakpoint moving automatically from line 142 to line 141

 

Question : Why? While the breakpoint on line 142 is enable and valid , why does the breakpoint "remember" it comes from
line 141 and then "decide" do go back on this line?


I believe it has to do with the fact that CVI try to set the environment back to the state it was before debugging the code.
IMHO this is weird.

Indeed, at the end we have a source code with a breakpoint set on a commented line.

What is the value for the user?

 

 

Experiment #2 :
If you run the same experiment but, this time, starting with a breakpoint and a comment on line 142 (last SetActiveCtrl() function call)
then the breakpoint move automatically from line 142 to line 144 (return statement)

 

The issue now is that the code stop on the return statement quite often and not only when the EVENT_COMMIT is managed

 

Based on previous experiments I would like to suggest the following 

 

Plan A :


- During code edition, commenting a line of code which have a breakpoint CVI should disable the breakpoint (grey diamond). This provide visual information to the user.
- CVI should not try to find a new line of code where to set an active breakpoint
- Uncommenting a line which had a breakpoint CVI should NOT enable the breakpoint for the user. The breakpoint should stay grey. A single click on the grey diamond should enable the breakpoint (see another proposal I made about breakpoints)

 


Plan B :


- If, before execution, one breakpoint is found on a commented line
- Disable the breakpoint on the commented line (grey diamond). This provide visual information to the user.
- Try to set an new active breakpoint to the statement right after the current line of code if and only if :

a - the statement belongs to the same current block ( {.....} )

b - the condition (if any) is still valid on the selected line of code (this is already done today by CVI)

- If this is not possible, try to set an new active breakpoint to the statement right before the current line of code if and only if :

a - the statement belongs to the same current block ( {.....} )

b - the condition (if any) is still valid on the selected line of code

- Once set, even after the debugging session ends, the new active breakpoint remains active and in place

 

 

I vote for Plan B

Best regards, Philippe

It would be great if NI could provide standard translations of the NI runtime message file msgrte.txt in commonly-used languages.

 

Whilst we can get translations done ourselves, it is normally done by translators who have little knowledge of the runtime context so the quality is rather variable; also, I get the feeling that we are duplicating effort that may have been already spent elsewhere.

 

If it helps, I for one would be willing to pay for a decent translation.

CTRL+Q should highlight all instances of the results in the editor

Same thing with CTRL+F

This is similar to Notepad++ for example

 

I find the ALT+UP ARROW and ALT+DOWN ARROW of Visual Studio 2013 quite useful (move selected lines)

 

Please, implement CTRL + L to delete a line

I know the short cut is already owned by "go to line" but my current macro is not that good 😞

 

It seems macros are not working in the editor while debugging a code.

Could be usefull.

Will be mandatory if one day the "Comment multiple lines" is implemeted using a macro 🙂

 

Best regards, Philippe

Quite often I need to look at one project source code while working on a second one

So, I use Windows File Explorer, find my project of interrest then double click on the .cws file

In this case, CVI load the cws file in the running instance of the IDE

This is not really what I want

I would like CVI  opens the workspace in a new instance of the IDE (similar to what is done when, in a function panel help, you click on the "open sample code" button)

For what I remember I believe the above behavior is the one adopted by Visual Studio Express 2013

So far, I must remember to run a second instance of CVI first and then drag'n drop the cws file

 

Regards, Philippe

 

PS : drag'n drop a .cws or .prj should work on the CVI Welcome page

 

The functions available today are OK in terms of functionality but limited in terms of syntax/grammar

 

For example : 

  • No support for multiline patterns
  • No support for '\s' in patterns
  • No support for [:alnum:] in patterns
  • No Posix conformance (ISO/IEC 9945-2:1993 for example)
  • No way to select among various syntaxes (grep, awk, ECMAScript...)
  • At least the ECMAScript grammar should be fully supported

 

I would like to propose to change the Regular Expression compiler with a brand new one

Keep the existing API (but support much better grammar)

Extend the API of the current intrument driver if needed or if it make sense (a Find/Replace function could be a nice for example)

 

 

Philippe

Hello,

 

while editing operations on a panel can be undone this seems not possible for menus. For example, if I have changed the item name of a menu in the UI editor this can not be undone using CTRL-Z. I have to remember my last action and undo it myself.

 

Thanks.

SetAnnotationAttribute permits you to pass -1 in AnnotationIndex parameter to apply the attribute to all annotations on the graph, while SetCursorAttribute does not. It would be good that this command too permits someway to operate on all cursors in a single pass.

 

As an example, when I want to print a graph on a black-and-white printer I prepare the control for this changing all elements to black. 

I can use a single instruction for annotations:

   SetAnnotationAttribute (panelHandle, PANEL_GRAPH, -1, ATTR_ANNOTATION_CAPTION_COLOR, VAL_BLACK);

 

On the other hand, I need to iterate on all elements for cursors

   GetCtrlAttribute (panelHandle, PANEL_GRAPH, ATTR_NUM_CURSORS, &numCursors);
   for (k = 1; k <= numCursors; k++) SetCursorAttribute (panelHandle, PANEL_GRAPH, k, ATTR_CURSOR_COLOR, VAL_BLACK);

 

There is an option to display the default display format for integers and floating point, but no such option to set the default format for
"String Display" or "Array display". Strangely, "Array display" shows my arrays as decimal numbers even though I have the default display format for integers set to Hex.

Ideally, I would like to be able to set them separately for char and unsigned char strings. For example:
                char strings I prefer to display as Ascii, null-terminated strings (the current default).
Unsigned char strings I prefer to display in Hexadecimal, with Options==Display Entire buffer. This is because my unsigned char strings are actually arrays of bytes.

I've been using CVI for a long time and it's frustrating to setup these options each and every time I look at one of my unsigned char strings. Even if it can't be setup separately for signed/unsigned  chars, I would like the option to set some sort of default.

 

Another aside, would it be possible to display the array/string as hex characters with the Ascii equivalent just below it? A dual display would be even nicer!

Hello,

 

I don't know if it is possible technically but from a user's perspective it would be convenient for debugging a program (in debug configuration) if the UI constants could be provided in the data tooltips, too. Right now, if something is wrong with my UI I will have to do a lot of detective work to find out which control / control attribute is the problematic one...

 

Example: Consider the code

 

SetCtrlAttribute ( panel_handle, control_id, control_attribute, attribute_value );

 

Right now, if I hover over attribute_value, the tooltip will display something like "attribute_value = 24064". Then I will need to look up userint.h to find out which attribute value this is ( ATTR_CTRL_VAL ). It would be more convenient if the tooltip could include this information, too, and display something like "attribute_value = 24064 ( ATTR_CTRL_VAL )"

 

The same holds for control_id, because a number such as 14 will not immediately help me - I will have to go through the corresponding include file to find the respective UI control (e.g. TABPANEL_2_NUMERIC ).

 

 

Hi,

 

this is a very tiny suggestion, but still I would consider it a very convenient improvement:

 

Right now, if I am using the 'Find' command in the IDE with a typo in the search string (this happens frequently...!), press F3, I receive a popup message telling me that the string 'xxx' has no matches. After pressing OK the popup disappears, but also the Find window disappears! So I have to press Ctrl-F again just to correct my search string.

 

Hence I suggest that in case a search is not successful, (the popup disappears but) the Find window remains open. This is also true if the search was successful, so I would even consider the current behavior inconsistent Smiley Wink 

 

Thanks!

Hi,

 

following the discussion here it turns out that at present there is some ambiguity in using the taskbar button of applications created with CVI: Clicking on the taskbar button gives the visual impression of minimizing all panels of the application, in fact the panels are just hidden, not minimized. As a result, the application will behave differently if you really minimize panels using the _ panel button, or if you hide the panels by clicking on the taskbar. In the latter case the new EVENT_PANEL_MINIMIZE event does not get triggered and the application cannnot know that all panels are hidden (for the user appearing to be minimized). Hence this new event is required to complement this functionality.

Hi,

 

I think it would be a nice tool to save a panel which is generated dynamically from a source code. If I have a database with many variables which I want to set on a panel as controls, I could write an import of this database, generate a panel automatically and could save this panel as UIR file. After this I could use this automatically generated UIR file in a project.

 

Greets

 

Thomas

If a panel is made part of a tab (InsertPanelAsTabPage) or if a panel handle is obtained from a tab (GetPanelHandleFromTabPage), there are some restrictions as to how you can use that panel. Some of those restrictions could be lifted if the panel knew which tab it belonged to.

 

I suggest the addition of the following (or similar) attributes:

GetPanelAttribute(Panel, ATTR_PANEL_PARENT_TAB_CTRL, &TabCtrl);

GetPanelAttribute(Panel, ATTR_PANEL_PARENT_TAB_INDEX, &TabIndex);

And of course you can already get the parent panel with:

GetPanelAttribute(Panel, ATTR_PANEL_PARENT, &ParentTab);

 

So, now that a panel knows the tab it belongs to, some obvious associations can be handled by the UIR library:

  • Calling DiscardPanel should, internally, call DeleteTabPage instead of the current undefined and illogical behavior
  • SetActivePanel should do a SetActiveTabPage instead of the current buggy behavior
  • SetPanelAttribute(.., ATTR_DIMMED) should do a SetTabPageAttribute(..., ATTR_DIMMED)
  • - etc...

This would allow the user to select at runtime if he wants a Multiple Panels application (MDI) or a Single Panel/Multiple Tab application (tabbed SDI) and almost no changes are necessary to the code.

Browse any <file>.c, by right-click on a file in project view file list.

In Window "Source Code Browser/View" Browse Identifier:
Allow to copy entries in column 'Functions' and other columns, if useful.

 

Reason:
This would help to create a content list in <file>.c or any other documentation.

Copy full columns or line by line might be useful.

Hello NI,

 

during program development and debugging typically there is more than just the source window visible, i.e. the lower part of the screen is used by the find or the build output window. Now, if I switch to a different tab/window to edit the UIR file, this build output window will still be there and take valuable space, although it is completely useless for editing the UI. If I close it, it will remain closed even if I switch back to the source code.

 

I would prefer that 'context sensitive' wndows such as 'find results' / 'build output' ... only show up if meaningful, while they are automatically hidden if not needed, i.e. when a UIR window is displayed, and automatically redisplayed if the source code window is back.

 

Thanks for possible consideration,

Wolfgang

Hello,

 

Lets' assume a small structure or small array that one would like to have a look at during debugging. Selecting 'View Variable Value' (or Shift+F7) in the IDE puts the cursor on the corresponding line in the variable editor. If there are several variables, the variable of interest typically is in the last line of the variable editor. Now if one is interested in any element of the structure, it is always necessary to scroll down, which is quite inconvenient.

 

Hence I suggest to place the selected variable at the top of the variable view, allowing to see its first elements without scrolling.

 

Thanks

Hi,

 

as found in the help and in this discussion, the editor of CVI is limited to a maximum line length of 1020 characters. This seems to be a relict of old times and not quite up-to-date.

 

I suggest to deristrict this.

I would like an option for "Next Breakpoint" and "Previous Breakpoint" in the menus somewhere, similar to the existing "Next Tag" and "Previous Tag" items.  The reason why I ask is so I can then bind these new menu items to shortcut keys so I can bounce between where I have breakpoints set more easily.  It might also be convienent if there were also toolbar buttons that could be added for next/previous breakpoint.  Thanks.

CVI provides useful scanning / formatting functions, e.g. Fmt, which in part complement the ANSI functions. This means that some features can achieved using one library, but not (or not conveniently) using the other. Hence I would be happy to see some additional modifiers allowing the Fmt functions to provide some additional capabilities that are available in printf etc

 

In particular I suggest introducing

 

- + modifier to always denote the sign '+' or '-' of a number

- e/E to display the exponent 'e' as a small/large character

 

Thanks