diff m-toolbox/classes/@repogui/sqlResultsGUI.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/sqlResultsGUI.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,151 @@
+% SQLRESULTSGUI shows the results of a query in a new window.
+%
+% sqlResultsGUI(results, fields)
+%
+% M Hewitson 09-07-07
+%
+% $Id: sqlResultsGUI.m,v 1.2 2011/04/08 08:56:26 hewitson Exp $
+%
+function sqlResultsGUI(results, fields, query)
+  
+  
+  leftMargin   = 10;
+  bottomMargin = 100;
+  topMargin    = 20;
+  
+  btnHeight = 20;
+  btnWidth  = 60;
+  btnGap    = 20;
+  
+  Color     = [240 240 240]/255;
+  Height    = 600;
+  Width     = 800;
+  
+  Screen    = get(0,'screensize');
+  Position  = [Screen(3)/2 - Width/2 Screen(4)/2-Height/2 Width Height];
+  
+  % create figure
+  gui.main = figure('HandleVisibility','on',...
+    'IntegerHandle','off',...
+    'Menubar','none',...
+    'NumberTitle','off',...
+    'Name','Query Results',...
+    'Tag','main',...
+    'Color',Color,...
+    'Resize', 'on',...
+    'Position',Position,...
+    'ResizeFcn', {@resizeMain, leftMargin, bottomMargin, topMargin});
+  
+  % add query string
+  Tleft   = leftMargin;
+  Twidth = Width - 2*leftMargin;
+  Theight = 80;
+  Tbottom = Position(4) - Theight - 20;
+  sth = uicontrol(gui.main,'Style','edit',...
+    'String',query,...
+    'Fontsize', 14,...
+    'BackgroundColor','w',...
+    'Max', 100,...
+    'HorizontalAlignment', 'left',...
+    'Tag', 'QueryString', ...
+    'Enable', 'on', ...
+    'Position',[Tleft Tbottom Twidth Theight], ...
+    'Callback', {@qtxtCB, query});
+  
+  setappdata(gui.main, 'qstring', sth);
+  
+  if size(fields,2) ~= size(results,2)
+    fields = cell(1,size(results,2));
+  end
+  
+  % In MATLAB 2008a and above we can use a proper uitable:
+  if ~verLessThan('MATLAB', '7.6')
+    t = uitable(gui.main, 'Data', results, ...
+      'ColumnName', fields,...
+      'units', 'normalized',...
+      'Position', [.01,.08,1-0.02,.73]);
+  else
+    
+    % Otherwise, we use the createTable function which uses a JTable
+    [t,b] = repogui.createTable(gui.main, fields, results, false, ...
+      'AutoResizeMode',javax.swing.JTable.AUTO_RESIZE_OFF,...
+      'Editable',false,'Position',[.01,.08,1-0.02,.73]);
+    
+  end
+  
+  setappdata(gui.main, 'table', t);
+  
+  % add export button
+  btn = uicontrol(gui.main,...
+    'Style','pushbutton',...
+    'String','Export',...
+    'Tag', 'exportBtn',...
+    'Callback', {@exportBtn_Callback, gui, results, fields}, ...
+    'Position',[leftMargin leftMargin btnWidth btnHeight], 'Visible', 'off');
+    
+end
+%--------------------------------------------------------------------------
+% Callbacks
+
+% callback to reset the query string in case the user deletes it
+function qtxtCB(hObject, eventdata, query)
+  
+  set(hObject, 'String', query);
+end
+%-------------------------------------------------------
+% export button
+function exportBtn_Callback(hObject, eventdata, gui, results, fields)
+  
+  % get table
+  t   = getappdata(gui.main, 'table');
+  table = get(t.Table);
+  
+  rows = table.SelectedRows + 1;
+  cols = table.SelectedColumns + 1;
+  res = results(rows, cols);
+  nResults = size(res, 1);
+  
+  % get file to export to
+  [filename, pathname, filteridx] = uiputfile('*.txt', 'Select export file');
+  
+  fd = fopen(filename, 'w+');
+  
+  % header
+  fprintf(fd, '# ');
+  fprintf(fd, '%s\t|\t', fields{cols});
+  fprintf(fd, '\n');
+  
+  
+  for j=1:nResults
+    for k=1:size(res,2)
+      r = res{j,k};
+      if ischar(r)
+        fprintf(fd, '%s\t\t', char(r));
+      elseif isnumeric(r)
+        fprintf(fd, '%f\t\t', r);
+      else
+        error('### Unknown data format.');
+      end
+    end
+    fprintf(fd, '\n');
+  end
+  fclose(fd);
+  
+  edit(filename);
+end
+%-------------------------------------------------------
+% Resize Main figure
+function resizeMain(hObject, eventdata, leftMargin, bottomMargin, topMargin)
+  
+  % resize table
+  s   = getappdata(hObject, 'qstring');
+  ps  = get(s, 'Position');
+  t   = getappdata(hObject, 'table');
+  fs  = get(hObject, 'Position');
+  pos = get(t, 'Position');
+  
+  % set(t, 'Position', [pos(1) pos(2) fs(3)-2*leftMargin fs(4)-bottomMargin-ps(4)]);
+  set(s, 'Position', [ps(1) fs(4)-ps(4)-20 fs(3)-2*leftMargin ps(4)]);
+  
+end
+% END