Mercurial > hg > ltpda
diff m-toolbox/classes/@repogui/buildHLQPanel.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@repogui/buildHLQPanel.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,344 @@ +% BUILDHLQPANEL build the High Level Queries panel. +% +% N Tateo 16-04-09 +% +% $Id: buildHLQPanel.m,v 1.6 2011/04/08 08:56:25 hewitson Exp $ +% +function buildHLQPanel(mainfig) + + import utils.const.* + utils.helper.msg(msg.PROC1, 'building High Level Queries Panel'); + + htab = mainfig.panels(5); + + Gproperties = mainfig.Gproperties; + pmarg = 0.025; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % List of HLQs: + + hlq_name = 'ao.name = ''name'' AND tsdata.t0 > x'; + hlq_desc = 'Select AOs with tsdata of given channel name and initial time successive to a given t0.'; + hlq_str = ['select objmeta.obj_id from objmeta,ao,tsdata '... + 'where objmeta.obj_id = ao.obj_id '... + 'and ao.data_id = tsdata.id '... + 'and objmeta.name=''var_1'' '... + 'and tsdata.t0>=''var_2''']; + % Each HLQ has its proper list of parameters to set. Each parameter is + % defined inside a plist: + % - name: the name of the parameters to set. + % - type: edit, list, popup, time. + % - values: if list/popup, the possible values to choose among. + % - default: the default value associated to the parameter. + hlq_vars.v1 = plist( ... + 'name', 'Name:', ... + 'type', 'string', ... + 'values', [], ... + 'default', 'x1'); + hlq_vars.v2 = plist( ... + 'name', 'Initial time:', ... + 'type', 'time', ... + 'values', [], ... + 'default', '1970-01-01 00:00:00.000'); + hlq1 = {hlq_name , hlq_desc , hlq_str , hlq_vars}; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + hlq_name = 'ao.name = ''name'' AND x < tsdata.t0 < y'; + hlq_desc = 'Select AOs with tsdata of given channel name and initial time comprised in a given interval'; + hlq_str = ['select objmeta.obj_id from objmeta,ao,tsdata ' ... + 'where objmeta.obj_id=ao.obj_id ' ... + 'and ao.data_id=tsdata.id ' ... + 'and objmeta.name = ''var_1'' ' ... + 'and tsdata.t0 >= ''var_2'' ' ... + 'and tsdata.t0+INTERVAL tsdata.nsecs SECOND <= ''var_3'' ']; + + hlq_vars.v1 = plist( ... + 'name', 'Name:', ... + 'type', 'string', ... + 'values', [], ... + 'default', 'x1'); + hlq_vars.v2 = plist( ... + 'name', 'Initial time:', ... + 'type', 'time', ... + 'values', [], ... + 'default', '1970-01-01 00:00:00.000'); + hlq_vars.v3 = plist( ... + 'name', 'Final time:', ... + 'type', 'time', ... + 'values', [], ... + 'default', '1970-01-02 00:00:00.000'); + hlq2 = {hlq_name , hlq_desc , hlq_str , hlq_vars}; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% hlq_name = 'Query name 3'; +% hlq_desc = 'Query description'; +% hlq_str = 'query_string'; +% hlq_vars.v1 = plist( ... +% 'name', '', ... +% 'type', '', ... +% 'values', [], ... +% 'default', []); +% hlq_vars.v2 = plist( ... +% 'name', '', ... +% 'type', '', ... +% 'values', [], ... +% 'default', []); +% hlq3 = {hlq_name , hlq_desc , hlq_str , hlq_vars}; + + + HLQ = [ hlq1 ; hlq2 ]; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + CommonHeight = 0.06; + +% header + bw = 0.4; + bl = pmarg; + bh = CommonHeight; + bb = 1-2*pmarg-bh; + hlqText = uicontrol(htab, 'Style','text',... + 'String', 'High Level Queries:',... + 'BackgroundColor', 'w', ... + 'Units', 'normalized', ... + 'Userdata',1,... + 'Fontsize', Gproperties.fontsize+2, ... + 'Position',[bl bb bw bh]); + +% list box + bh = 0.65; + bb = bb - bh - .03; + hlqListbox = uicontrol(htab,'Style','list',... + 'String',HLQ(:,1),... + 'Min',1,... + 'Max',1,... + 'BackgroundColor', 'w',... + 'Fontsize', Gproperties.fontsize,... + 'Units', 'normalized', ... + 'Position', [bl bb bw bh],... + 'TooltipString', 'These are the supported High Level Queries',... + 'UserData', HLQ, ... + 'Tag', 'RepoguiHLQList' , ... + 'Callback' , @hlqListboxCbk ); + +% description field + bh = 0.2; + bb = bb - bh - .03; + bw = .3; + hlqDescbox = uicontrol(htab,'Style','text',... + 'String',HLQ{1,2},... + 'BackgroundColor', 'w',... + 'Fontsize', Gproperties.fontsize,... + 'Units', 'normalized', ... + 'Position', [bl bb bw bh],... + 'Tag', 'RepoguiHLQDesc'); + +% set button + bh = 0.1; + bw = 0.1; + bl = .4 + pmarg - bw; + pbh = uicontrol(htab,'Style','pushbutton',... + 'String','Set',... + 'Callback', {'repogui.cb_submit', mainfig}, ... + 'Units', 'normalized', ... + 'Fontsize', Gproperties.fontsize, ... + 'Position',[bl bb+.1 bw bh], ... + 'Tag','hlqSetButton', ... + 'Callback' , @hlqSetButtonCbk ); + +% query button + uicontrol(htab, ... + 'Style','pushbutton', ... + 'String','Execute query', ... + 'Units', 'normalized', ... + 'Position',[.7 0 .29 .06], ... + 'Tag', 'executeHLQbutton', ... + 'Callback', @hlqExecQuery, ... + 'Userdata', mainfig, ... + 'enable', 'off'); + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Dynamical part of the panel + + bl = .45; + bb = .08; + bw = .54; + bh = .88; + dynpanel = uipanel(htab, ... + 'BackGroundColor', 'w', ... + 'Title' , 'Query settings:', ... + 'Position', [bl bb bw bh], ... + 'Tag', 'dynamicPanel', ... + 'Visible', 'on'); + + + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +end + +function hlqListboxCbk(hObject,varargin) + % Callback associated to the HLQ listbox + + currVal = get(hObject,'Value'); + hlq = get(hObject,'UserData'); + currHLQ = hlq(currVal,:); + set(findobj(gcf,'Tag','RepoguiHLQDesc'),'String',currHLQ{2}) + +end + +function hlqSetButtonCbk(hObject,varargin) + % Callback associated to the set button + + currVal = get(findobj(gcf,'Tag','RepoguiHLQList'),'Value'); + hlq = get(findobj(gcf,'Tag','RepoguiHLQList'),'UserData'); + hlq = hlq(currVal,:); + hlq_vars = hlq{4}; + dynPanel = findobj(gcf,'Tag','dynamicPanel'); + set(dynPanel,'Visible','on'); + set(findobj(gcf,'Tag','executeHLQbutton'),'enable','on') + delete(findobj(gcf,'Parent',dynPanel)) + drawDynamicPanel(dynPanel, hlq_vars,get(hObject,'FontSize')) + +end + +function drawDynamicPanel(dynPanel, hlq_vars, fontsize) + % To draw the dynamic panel, showing all query settings. + + bl = .05; + bb = .95; + bh = .1; + + var_numb = numel(fieldnames(hlq_vars)); + for ii = 1:var_numb + curr_var = ['v' num2str(ii)]; + curr_var = hlq_vars.(curr_var); + % this is the plist + var_name = find(curr_var,'name'); + var_type = find(curr_var,'type'); + var_val = find(curr_var,'default'); + + bb = bb - .12; + bw = .4; + + switch var_type + case 'string' + uicontrol(dynPanel, ... + 'Style','text', ... + 'String', var_name, ... + 'HorizontalAlignment', 'right', ... + 'BackgroundColor', 'w', ... + 'ForegroundColor', 'k', ... + 'Fontsize', fontsize+1, ... + 'Units', 'normalized', ... + 'Position',[bl bb bw bh]); + uicontrol(dynPanel, ... + 'Style','edit', ... + 'String', var_val, ... + 'HorizontalAlignment', 'center', ... + 'BackgroundColor', 'w', ... + 'ForegroundColor', 'k', ... + 'Fontsize', fontsize+1, ... + 'Units', 'normalized', ... + 'Position',[bl+bw+.02 , bb+.038 , bw+.08 , .08],... + 'Tag',['var_' num2str(ii)]); + + case 'time' + bw = .3; + uicontrol(dynPanel, ... + 'Style','text', ... + 'String', var_name, ... + 'HorizontalAlignment', 'right', ... + 'BackgroundColor', 'w', ... + 'ForegroundColor', 'k', ... + 'Fontsize', fontsize+1, ... + 'Units', 'normalized', ... + 'Position',[bl-.03 bb bw-.05 bh]); + uicontrol(dynPanel, ... + 'Style','edit', ... + 'String', var_val, ... + 'TooltipString', 'epoch in milliseconds [0] or time string [1970-01-01 00:00:00.000]', ... + 'HorizontalAlignment', 'center', ... + 'BackgroundColor', 'w', ... + 'ForegroundColor', 'k', ... + 'Fontsize', fontsize+1, ... + 'Units', 'normalized', ... + 'Position',[bl+bw-.06 , bb+.038 , bw+.18 , .08],... + 'Tag',['var_' num2str(ii)], ... + 'Callback', @checkTimeInput ); + prefs = getappdata(0, 'LTPDApreferences'); + timezoneList = utils.timetools.getTimezone; + currTimeZone = find(ismember(timezoneList,prefs.time.timezone)); + uicontrol(dynPanel, ... + 'Style','popupmenu', ... + 'String', timezoneList, ... + 'Value', currTimeZone, ... + 'TooltipString', 'Timezone', ... + 'HorizontalAlignment', 'center', ... + 'BackgroundColor', 'w', ... + 'ForegroundColor', 'k', ... + 'Fontsize', fontsize+1, ... + 'Units', 'normalized', ... + 'Position',[bl+bw+.435 , bb+.038 , .2 , .08],... + 'Tag',['timezone_' num2str(ii)], ... + 'Callback' , 'set(findobj(gcf,''TooltipString'',''Timezone''),''Value'',get(gco,''Value''))' ); + + + end + + end + +end + +function checkTimeInput(hObject, varargin) + + input = get(hObject,'String'); + if ~isnan(str2double(input)) + date_str = datestr(str2double(input),'yyyy-mm-dd HH:MM:SS.FFF'); + set(hObject,'String',date_str); + end + +end + +function hlqExecQuery(hObject,varargin) + % Callback associated to the set button + + mainfig = get(hObject,'Userdata'); + HLQlist = findobj(gcf,'Tag','RepoguiHLQList'); + HLQ = get(HLQlist,'Userdata'); + currHLQ = get(HLQlist,'Value'); + currHLQ = HLQ(currHLQ,:); + hlq_str = currHLQ{3}; + hlq_vars = currHLQ{4}; + var_numb = numel(fieldnames(hlq_vars)); + + for ii=1:var_numb + var_str = findobj(gcf,'Tag',['var_' num2str(ii)]); + var_str = get(var_str,'String'); + + var_type = find(hlq_vars.(['v' num2str(ii)]), 'type'); +% switch var_type +% case 'time' +% % Convert the string in UTC timezone +% timezone = get(findobj(gcf,'Tag',['timezone_' num2str(currVal)]),'Value'); +% timezoneList = utils.timetools.getTimezone; +% timezone = timezoneList(timezone); +% if ~strcmp(timezone,'UTC') +% var_str = char(setTimezone( time(plist('time_str',time_str,'timezone',timezone) ,'UTC')); +% end +% end + + hlq_str = strrep(hlq_str, ['var_' num2str(ii)], var_str); + end + + repogui.cb_executeQuery(hlq_str,mainfig) + +end