dynamically creating push buttons in matlab - matlab

i am trying to create a GUI in matlab, in which dynamically the buttons must be created.
i.e when the user selects the directory, as many number of buttons will be created as many number of files are there in the selected directory. How can one achieve that? any help will be seriously appreciated.

You want to use the handle graphics and more specifically the handle-graphics components. From the same webpage you can see the code to create a button programmatically,
h = figure('ToolBar','none');
ht = uitoolbar(h);
a = rand(16,16,3);
htt = uitoggletool(ht,'CData',a,'TooltipString','Hello');
and also set their callback/handler properties as a property-value pair.

Related

How to display table in parts in command window in matlab?

I have a table which consists of 17025 rows. When I try to display the table, the whole table displays. But I want it in small parts. How do I make it display in small parts.
Type more on at the MATLAB command prompt. Subsequent output will be paused after every screenful.
Documentation: https://www.mathworks.com/help/matlab/ref/more.html
I usually check my variables in these ways:
Suppose that we have a variable called A=rand(1000,1000).
1.we can display a part of A by calling A(127:130,241:243), to show the specific part of it.
>> A(127:130,241:243)
ans =
0.8152 0.0674 0.5609
0.1977 0.3906 0.6491
0.3288 0.1255 0.7478
0.9176 0.4253 0.5111
2.double click the name of the variable in the Workspace, so we could check it in Variables.
3.if your data only contain few columns, I recommend you to draw them in a figure and view them by dragging a Data Cursor in the picture.
SampleCode:
A=[1:1:200; 250:-1:51];
plot(A')
However, only the first option could display matrix on command window, but 2&3 is much faster since we don't know which part to display.

MATLAB uitable created by GUIDE to update data sets

I'm currently working on a GUI that has a uitable within it. The idea is to allow the user to input a string and press a button to add a new row of cells, like so: ui_table_currently.
In addition to this, when the user clicks 'accept', the data set so far would be saved. This means if the user were to load up the GUI again, the same data set would be shown as when they closed down the GUI.
In practice, I've managed to save the data set with the users input into the workspace in MATLAB, however, I cannot update the data set that is shown in the uitable when I reload the GUI, unless I use GUIDE and change uitable via (Inspector > Table Property Editor > Data > Change data value to the selected workspace variable).
My question is this: How do I get uitable to retain the data set it has when I close it, without manually having to change it through GUIDE?
You should have two files created with GUIDE. For the sake of example, let's say your's are named raimo.fig and raimo.m. Let's also say you gave your uitable the tag, 'table_1'.
If you edit the raimo.m file, you should see a line like this
% --- Executes just before analysis is made visible.
function raimo_OpeningFcn(hObject, eventdata, handles, varargin)`
Load your data from the file within this function, and then give it to your user data.
Here's a made up example of how to do it:
a = load('yourAmbiguousData');
set(handles.table_1,'table',a);
I don't know how your data is saved, or what is called, but if you have pulled it out of your uitable correctly, you can just put it back in there with a set command.

Moodle Create Radio buttons group

I am new to moodle. This is a very basic question , i have searched a lot but not able to correctly create a group of radiobuttons. I have not created radio buttons so far in moodle forms earlier.
I want two radio buttons,with labels "award" and "deduct", in a local plugin i am creating.
Code i wrote :
$awardingTypeRadioArr = array();
$awardingTypeRadioArr[0] = $mform->createElement( 'radio','award','',get_string('clAwardRadioLbl','local_hps'));
$awardingTypeRadioArr[1] = $mform->createElement( 'radio','award','',get_string('clDeductRadioLbl','local_hps'));
$mform->addGroup( $awardingTypeRadioArr,'awardingType' );
I get the radio buttons and labels, but the second of the two is checked by default. Bigger problem is,I am not getting anything for the radio buttons in the form data.
Please clarify how to do this.
Thanks.
You have to use 'award' instead of 'awardingType' in the below line :
$mform->addGroup( $awardingTypeRadioArr,'awardingType' );
Also to set a detault value you can use
$mform->setDefault() function.
Hope this helps

how to hide existing uicontrol in Matlab before printing figure?

I am using a Matlab based program that does some nice plots of some model results. It adds uicontrol slides and buttons in figures. I have no expierence with gui programming in Matlab, and I dont need it, I just wanna add on my matlab script a couple of lines to hide slides and buttons. I can do it manually from the property editor and set "Visible" to "off", but I was reading the Matlab manual and it does not explain how to retrieve an existing uicontrol and change its properties. Any hint? I tried this with no luck:
b = get(gcf,'uicontrol');
set(b,'Style','pushbutton','Visible','off');
Thanks
You simply need to access the element from the handles structure and change its property from there.
For example, if the pushbutton is stored in the handles structure like this:
handles.b %// Whatever name you gave it and see in the Property Inspector
you can make it not visible using the command
set(handles.b,'Visible','off')
and likewise for every other properties.
Little trick: If you need to repeatedly turn on and off elements of your GUI, you can put them in an array of handles for example in the Opening_Fcn of the GUI and change them all at once using this array anywhere in the GUI. This way you won't have to always call them one by one which can be tedious.
Example:
handles.AllButtons = [handles.button1; handles.button2; handles.button3]
this contains the handles to 3 pushbuttons let's say. Now if yu need to turn them all off/on at the same time, you can do:
set(handles.AllButtons,'Visible','off')
instead of doing
set(handles.button1,'Visible','off')
set(handles.button2,'Visible','off')
set(handles.button3,'Visible','off')
From GUIDE, you can check the actual name of any uicontrol component in the Property Inspector. Here is a screenshot from a GUI I made with GUIDE:
In this case, the Tag associated with the button is pushbutton28_ReferenceChannelApply.
Therefore, in order to change any of its properties I would need to use:
set(handles.pushbutton28_ReferenceChannelApply,'Property','value')
EDIT 2
You can look for pushbuttons in your GUI with the findobj command like so:
FindButtons = findobj('Style','push')
which will output an array of handles to those pushbuttons. Then you can query their properties using the get command:
get(FindButtons(1))

Display checkbox inside a listbox

In my (programmatic) Matlab GUI, I have a listbox uicontrol.
What I want is to display checkboxes in front of each option. When a user clicks the checkbox, it's marked (and the element will be considered during the calculations later). While if the user clicks the label, a description of the selected option will be displayed in a text uicontrol to inform the user what the option means.
Basically, I want functionality similar to installation programs where you can select components to install and can get information about said components by clicking them (which does not necessarily mark them as selected).
Is there a way to do this with checkboxes or something similar?
There are actually 2 built-in controls that you could use within Matlab:
com.jidesoft.swing.CheckboxList
com.mathworks.mwswing.checkboxlist.CheckBoxList
Usage example (more details in my Matlab-Java book):
jList = java.util.ArrayList; % any java.util.List will be ok
jList.add(0,'First');
jList.add(1,'Second');
jList.add(2,'Third');
jList.add(3,'and last');
jCBList = com.mathworks.mwswing.checkboxlist.CheckBoxList(jList);
jScrollPane = com.mathworks.mwswing.MJScrollPane(jCBList);
[jhCBList,hContainer] = javacomponent(jScrollPane,[10,10,80,65],gcf);
set(jCBList, 'ValueChangedCallback', #myMatlabCallbackFcn);
jCBModel = jCBList.getCheckModel;
jCBModel.checkAll;
jCBModel.uncheckIndex(1);
jCBModel.uncheckIndex(3);
There's no "ready" way for doing that - as listboxes take only plain strings as entries.
You could "manually" draw checkbox fitted into the area of the listbox, but that might mean quite a lot of work to get everything working...
Another alternative is to go for a java-componenent - e.g. using the jide components available in matlab. See e.g.
http://undocumentedmatlab.com/blog/using-jide-combo-boxes/
for a few examples.