Mercurial > hg > octave-lyh
diff scripts/ui/listdlg.m @ 16512:7f2395651a1c
dialog boxes with Qt widgets
* dialog.h, dialog.cc: New files.
* libgui/src/module.mk: Update file lists.
* main-window.h, main-window.ccmain_window::connect_uiwidget_links,
main_window::handle_create_dialog,
main_window::handle_create_listview,
main_window::handle_create_inputlayout): New functions.
(main_window::construct): Call connect_uiwidget_links.
* octave-link.h, octave-link.cc (octave_link::message_dialog,
octave_link::do_message_dialog, octave_link::list_dialog,
octave_link::do_list_dialog, octave_link::input_dialog,
octave_link::do_input_dialog): New functions.
* octave-qt-link.h, octave-qt-link.cc (octave_qt_link::message_dialog,
octave_qt_link::do_message_dialog, octave_qt_link::list_dialog,
octave_qt_link::do_list_dialog, octave_qt_link::input_dialog,
octave_qt_link::do_input_dialog, make_qstring_list): New functions.
* octave-link.cc (F__octave_link_edit_file__): Call
flush_octave_stdout before running the edit file action.
(F__octave_link_message_dialog__, F__octave_link_list_dialog__,
__octave_link_input_dialog__): New functions.
* errordlg.m, helpdlg.m, inputdlg.m, listdlg.m, msgbox.m, warndlg.m:
New demos adapted from dlgtest.m
* dlgtest.m: Delete.
* scripts/java/module.mk: Remove it from the list of files.
* inputdlg.m: Try __octave_link_input_dialog__ first. Only try java
method if JAVA feature is available.
* listdlg.m: Likwise, for __octave_link_list_dialog__.
* private/message_dialog.m: Likewise, for
__octave_link_message_dialog__.
author | Daniel J Sebald <daniel.sebald@ieee.org>, John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 13 Apr 2013 15:22:34 -0400 |
parents | ff061068a66c |
children | 6ae555fc8c43 |
line wrap: on
line diff
--- a/scripts/ui/listdlg.m +++ b/scripts/ui/listdlg.m @@ -77,7 +77,7 @@ ## @seealso{errordlg, helpdlg, inputdlg, msgbox, questdlg, warndlg} ## @end deftypefn -function varargout = listdlg (varargin) +function [sel, ok] = listdlg (varargin) if (nargin < 2) print_usage (); @@ -122,21 +122,60 @@ if (! iscell (listcell)) listcell = {listcell}; endif - - ## transform matrices to cell arrays of strings - ## swap width and height to correct calling format for JDialogBox - listsize = {num2str(listsize(2)), num2str(listsize(1))}; - initialvalue = arrayfun (@num2str, initialvalue, "UniformOutput", false); - - ret = javaMethod ("listdlg", "org.octave.JDialogBox", listcell, - selmode, listsize, initialvalue, name, prompt, - okstring, cancelstring); + + [sel, ok] = __octave_link_list_dialog__ (listcell, selmode, listsize, + initialvalue, name, prompt, + okstring, cancelstring); + if (ok > 0) + return; + endif - if (numel (ret) > 0) - varargout = {ret, 1}; - else - varargout = {{}, 0}; + if (__have_feature__ ("JAVA")) + ## transform matrices to cell arrays of strings + ## swap width and height to correct calling format for JDialogBox + listsize = {num2str(listsize(2)), num2str(listsize(1))}; + initialvalue = arrayfun (@num2str, initialvalue, "UniformOutput", false); + + ret = javaMethod ("listdlg", "org.octave.JDialogBox", listcell, + selmode, listsize, initialvalue, name, prompt, + okstring, cancelstring); + + if (numel (ret) > 0) + sel = ret; + ok = 1; + else + sel = {}; + ok = 0; + endif + + return; + endif + ## FIXME -- provide terminal-based implementation here? + + error ("listdlg is not available in this version of Octave"); + endfunction +%!demo +%! disp('- test listdlg with selectionmode single. No caption, no prompt.'); +%! itemlist = {'An item \\alpha', 'another', 'yet another'}; +%! s = listdlg ( 'ListString',itemlist, 'SelectionMode','Single' ); +%! imax = numel (s); +%! for i=1:1:imax +%! disp(['Selected: ',num2str(i),': ', itemlist{s(i)}]); +%! end + +%!demo +%! disp('- test listdlg with selectionmode and preselection. Has caption and two lines prompt.'); +%! itemlist = {'An item \\alpha', 'another', 'yet another'}; +%! s = listdlg ( 'ListString',itemlist, ... +%! 'SelectionMode','Multiple', ... +%! 'Name','Selection Dialog', ... +%! 'InitialValue',[1,2,3,4], +%! 'PromptString',{'Select an item...', '...or multiple items'} ); +%! imax = numel (s); +%! for i=1:1:imax +%! disp(['Selected: ',num2str(i),': ', itemlist{s(i)}]); +%! end