Mercurial > hg > ltpda
diff m-toolbox/classes/@repogui/buildConditions.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/buildConditions.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,326 @@ +% Callback to build the query conditions panel. +% +% $Id: buildConditions.m,v 1.5 2011/04/08 08:56:26 hewitson Exp $ +% +function buildConditions(mainfig) + + ALLHEIGHT = 0.06; + pmarg = 0.025; + + panel = mainfig.panels(3); + Ppos = get(panel, 'Position'); + Nc = mainfig.Nconditions; + conn = mainfig.connection; + Gproperties = mainfig.Gproperties; + fontsize = Gproperties.fontsize; + + % before deleting, record the table selection + tableSelected = mainfig.tableSelected; + % record field selection + fieldList = findobj(mainfig.handle, 'Tag', 'fieldsList'); + fselection = get(fieldList, 'Value'); + % record order by + fieldOrder = findobj(mainfig.handle, 'Tag', 'fieldOrderBy'); + forder = get(fieldOrder, 'Value'); + % record sort direction + sortDir = findobj(mainfig.handle, 'Tag', 'sortDir'); + sort = get(sortDir, 'Value'); + % record current conditions + conds = cell(Nc,4); + for k=1:Nc + pmh = findobj(mainfig.handle, 'Tag', sprintf('c%02dField', k)); + conds{k,1} = get(pmh, 'Value'); + pmh = findobj(mainfig.handle, 'Tag', sprintf('c%02dCondition', k)); + conds{k,2} = get(pmh, 'Value'); + pmh = findobj(mainfig.handle, 'Tag', sprintf('c%02dValue', k)); + conds{k,3} = get(pmh, 'String'); + if k<Nc + pmh = findobj(mainfig.handle, 'Tag', sprintf('c%02dCompound', k)); + conds{k,4} = get(pmh, 'Value'); + end + end + + ch = get(panel, 'Children'); + if ~isempty(ch) + delete(ch) + drawnow + end + %-------------------------------------------------------------------------- + %-- Draw Table selection + + % get tables + tables = repogui.getTables(mainfig); + Sleft = pmarg; + Sheight = ALLHEIGHT; + Sbottom = 1 -pmarg - Sheight; + Swidth = 0.1; + + sth = uicontrol(panel,'Style','text',... + 'String', 'From',... + 'Fontsize', fontsize,... + 'Units', 'normalized', ... + 'BackgroundColor', Gproperties.Gcol{3},... + 'HorizontalAlignment', 'left',... + 'Position',[Sleft Sbottom Swidth Sheight]); + + Sleft = Sleft + Swidth + pmarg; + Swidth = 0.15; + pmh = uicontrol(panel,'Style','popupmenu',... + 'String', tables,... + 'Fontsize', fontsize,... + 'Units', 'normalized', ... + 'BackgroundColor', Gproperties.Gcol{3},... + 'Value', 1,... + 'Position',[Sleft Sbottom Swidth Sheight],... + 'Tag', 'tableSelect'); + if ~isempty(tableSelected) && tableSelected <= numel(tables) + set(pmh, 'Value', tableSelected); + end + set(pmh, 'Callback', {'repogui.cb_tableSelect', pmh, mainfig}); + + %-------------------------------------------------------------------------- + %-- Draw Fields Selection list + + % get fields + fields = repogui.getFields(mainfig, conn); + Sleft = pmarg; + Sheight = ALLHEIGHT; + Sbottom = Sbottom - pmarg - Sheight; + Swidth = 0.1; + + sth = uicontrol(panel,'Style','text',... + 'String', 'Select',... + 'Fontsize', fontsize,... + 'Units', 'normalized', ... + 'BackgroundColor', Gproperties.Gcol{3},... + 'HorizontalAlignment', 'left',... + 'Position',[Sleft Sbottom Swidth Sheight]); + + Sheight = 0.5; + Sleft = Sleft + pmarg + Swidth; + Sbottom = 1 - 2*pmarg - ALLHEIGHT - Sheight; + Swidth = 0.15; + lbh = uicontrol(panel,'Style','listbox',... + 'String', fields,... + 'Value',1,... + 'Units', 'normalized', ... + 'BackgroundColor', 'w',... + 'Fontsize', fontsize,... + 'Max', 1000,... + 'Position',[Sleft Sbottom Swidth Sheight],... + 'Tag', 'fieldsList'); + + set(lbh, 'Callback', {'repogui.cb_fieldSelect', pmh, mainfig}); + if ~isempty(fselection) && tableSelected <= numel(fields) + set(lbh, 'Value', fselection); + end + + %-------------------------------------------------------------------------- + %-- Query display + listpos = get(lbh, 'Position'); + Sleft = pmarg; + Sheight = ALLHEIGHT; + Sbottom = 0.1; %listpos(2) - 40 - Sheight; + Swidth = 0.1; + + sth = uicontrol(panel,'Style','text',... + 'String', 'Query:',... + 'Units', 'normalized', ... + 'Fontsize', fontsize,... + 'Max', 5,... + 'BackgroundColor', Gproperties.Gcol{3},... + 'HorizontalAlignment', 'left',... + 'Position', [Sleft Sbottom Swidth Sheight]); + + Sleft = Sleft + Swidth + pmarg; + Swidth = 1-Sleft-pmarg; + Sheight = 0.2; + Sbottom = 0.06 + pmarg; + sth = uicontrol(panel,'Style','edit',... + 'String', '',... + 'Fontsize', fontsize,... + 'Units', 'normalized', ... + 'Max', 5,... + 'BackgroundColor', 'w',... + 'HorizontalAlignment', 'left',... + 'Position', [Sleft Sbottom Swidth Sheight],... + 'Tag', 'queryDisplayTxt'); + + + + %-------------------------------------------------------------------------- + %-- Draw conditions + + conditions = {'=', '<>', '<=', '>=', '<', '>', 'like', 'not like', 'is'}; + compounds = {'AND', 'OR', 'XOR'}; + + pos = get(lbh, 'Position'); + Sleft = 0.35; + Sheight = ALLHEIGHT; + Sbottom = 1-pmarg-Sheight; + Swidth = 0.1; + + sth = uicontrol(panel,'Style','text',... + 'String', 'Where',... + 'Fontsize', fontsize,... + 'Units', 'normalized', ... + 'BackgroundColor', Gproperties.Gcol{3},... + 'HorizontalAlignment', 'left',... + 'Position',[Sleft Sbottom Swidth Sheight]); + + + pos = get(sth, 'Position'); + Cheight = ALLHEIGHT; + STEP = pmarg; + for k=1:Nc + Cleft = pos(1); + Cbottom = pos(2) - pos(4) - pmarg - (k-1)*(Cheight+pmarg); + Cwidth = 0.1; + % Field Dropdown + pmh = uicontrol(panel,'Style','popupmenu',... + 'String', fields,... + 'Fontsize', fontsize,... + 'Units', 'normalized', ... + 'BackgroundColor', 'w', ... + 'Value',1,'Position',[Cleft Cbottom Cwidth Cheight],... + 'Tag', sprintf('c%02dField', k)); + set(pmh, 'Callback', {'repogui.buildquery', mainfig}); + if ~isempty(conds{k,1}) && conds{k,1} <= numel(fields) + set(pmh, 'Value', conds{k,1}); + end + % Gproperties.Gcol(3), + % Condition Dropdown + Cleft = Cleft + Cwidth + STEP; + Cwidth = 0.1; + pmh = uicontrol(panel,'Style','popupmenu',... + 'String', conditions,... + 'Fontsize', fontsize,... + 'Units', 'normalized', ... + 'BackgroundColor', 'w',... + 'Value',1,'Position',[Cleft Cbottom Cwidth Cheight],... + 'Tag', sprintf('c%02dCondition', k)); + set(pmh, 'Callback', {'repogui.buildquery', mainfig}); + if ~isempty(conds{k,2}) + set(pmh, 'Value', conds{k,2}); + end + + % Value txt box + Cleft = Cleft + Cwidth + STEP; + Cwidth = 0.2; + sth = uicontrol(panel,'Style','edit',... + 'String','',... + 'Fontsize', fontsize,... + 'BackgroundColor', 'w',... + 'Units', 'normalized', ... + 'HorizontalAlignment', 'left',... + 'Position',[Cleft Cbottom Cwidth Cheight],... + 'Tag', sprintf('c%02dValue', k)); + set(sth, 'Callback', {'repogui.buildquery', mainfig}); + if ~isempty(conds{k,3}) + set(sth, 'String', conds{k,3}); + end + + % Add compound statement + if k<Nc + Cleft = Cleft + Cwidth + STEP; + Cwidth = 0.1; + pmh = uicontrol(panel,'Style','popupmenu',... + 'String', compounds,... + 'Fontsize', fontsize,... + 'Units', 'normalized', ... + 'BackgroundColor', Gproperties.Gcol{3},... + 'Value',1,'Position',[Cleft Cbottom Cwidth Cheight],... + 'Tag', sprintf('c%02dCompound', k)); + set(pmh, 'Callback', {'repogui.buildquery', mainfig}); + if ~isempty(conds{k,4}) + set(pmh, 'Value', conds{k,4}); + end + end + + end + + %-------------------------------------------------------------------------- + %-- add +/- buttons + k = Nc+1; + Bbottom = pos(2) - pos(4) - pmarg - (k-1)*(Cheight+pmarg); + Bleft = pos(1); + Bheight = ALLHEIGHT; + Bwidth = 0.03; + pbh = uicontrol(panel,'Style','pushbutton','Fontsize', fontsize, 'String','+',... + 'Units', 'normalized', ... + 'Position',[Bleft Bbottom Bwidth Bheight ],... + 'Tag', 'condPlusBtn'); + set(pbh, 'Callback', {'repogui.cb_condPlusBtn', pbh, panel, mainfig}); + Bleft = pos(1) + Bwidth + pmarg; + pbh = uicontrol(panel,'Style','pushbutton','Fontsize', fontsize, 'String','-',... + 'Units', 'normalized', ... + 'Position',[Bleft Bbottom Bwidth Bheight ],... + 'Tag', 'condSubtractBtn'); + set(pbh, 'Callback', {'repogui.cb_condSubtractBtn', pbh, panel, mainfig}); + + + %-------------------------------------------------------------------------- + %-- order by + k = Nc + 2; + Sleft = pos(1); + Sheight = ALLHEIGHT; + Swidth = 0.07; + Sbottom = pos(2) - pos(4) - pmarg -(k-1)*(Cheight+pmarg); + sth = uicontrol(panel,'Style','text',... + 'String', 'Order by',... + 'Fontsize', fontsize,... + 'Units', 'normalized', ... + 'BackgroundColor', Gproperties.Gcol{3},... + 'HorizontalAlignment', 'left',... + 'Position',[Sleft Sbottom Swidth Sheight]); + % Gproperties.Gcol + % Field Dropdown + Sleft = pos(1) + pmarg + Swidth; + Swidth = 0.2; + pmh = uicontrol(panel,'Style','popupmenu',... + 'String', fields,... + 'Fontsize', fontsize,... + 'Units', 'normalized', ... + 'BackgroundColor', Gproperties.Gcol{3},... + 'Value',1,'Position',[Sleft Sbottom Swidth Sheight],... + 'Tag', 'fieldOrderBy'); + set(pmh, 'Callback', {'repogui.buildquery', mainfig}); + if ~isempty(forder) + set(pmh, 'Value', forder); + end + + % Desc Dropdown + Sleft = Sleft + pmarg + Swidth; + Swidth = 0.2; + pmh = uicontrol(panel,'Style','popupmenu',... + 'String', {'DESC', 'ASC'},... + 'Fontsize', fontsize,... + 'Units', 'normalized', ... + 'BackgroundColor', Gproperties.Gcol{3},... + 'Value',1,'Position',[Sleft Sbottom Swidth Sheight],... + 'Tag', 'sortDir'); + set(pmh, 'Callback', {'repogui.buildquery', mainfig}); + if ~isempty(sort) + set(pmh, 'Value', sort); + end + + + %-------------------------------------------------------------------------- + %-- Run query + + Swidth = 0.2; + Sleft = 1-Swidth-pmarg; + Sheight = ALLHEIGHT; + Sbottom = pmarg; + uicontrol(panel,'Style','pushbutton','String','Execute query',... + 'Units', 'normalized', ... + 'Position',[Sleft Sbottom Swidth Sheight ],... + 'Tag', 'refreshListBtn', ... + 'Callback', {'repogui.cb_executeQuery', mainfig}); + + % Build query + repogui.buildquery(mainfig) + + drawnow + +end