Changeset 214 for aedes.m


Ignore:
Timestamp:
Dec 17, 2015, 2:40:44 PM (3 years ago)
Author:
tjniskan
Message:
  • Changed contrast/brightness to window/level notation and removed the

obsolete gamma setting

  • Added icon and mouse gestures for the bucketfill operation. The operation

itself has been available in middle mouse button in the ROI draw tool, but
now has also its own toolbar button.

  • Added ROI statistics button in the ROI Analysis segment in the GUI.
  • Fixed a bug in the Current pixel value display.
  • Moved show/hide crosshairs to a toolbar button.

M aedes.m
M aedes_cdata.mat
M aedes_revision.m

File:
1 edited

Legend:

Unmodified
Added
Removed
  • aedes.m

    r213 r214  
    769769                              'enable','off');
    770770
     771% Show/hide crosshairs
     772H.UITOGGLE_CROSSHAIRS = uitoggletool('parent',H.UITOOLBAR,...
     773                               'CData',btn_cdata.cdata.crosshairs_small,...
     774                               'ClickedCallback',@l_ShowHideCrossbars,...
     775                               'TooltipString','Show/Hide Crosshairs',...
     776                               'enable','off',...
     777                               'state','off',...
     778                               'separator','on');
     779                                                                                                               
    771780% Show Grid
    772781H.UITOGGLE_GRID = uitoggletool('parent',H.UITOOLBAR,...
     
    887896                                   'separator','off');
    888897
     898H.UITOGGLE_FILLROI = uitoggletool('parent',H.UITOOLBAR,...
     899                                  'CData',btn_cdata.cdata.bucketfill,...
     900                                  'ClickedCallback',...
     901                                  ['set(get(gcbo,''userdata''),''state'',''off''),' ...
     902                    'set(gcbo,''state'',''on'')'],...
     903                                   'TooltipString','Mouse: Fill ROI',...
     904                                   'enable','off',...
     905                                   'state','off',...
     906                                   'separator','off');
     907
    889908H.UITOGGLE_MOVEROI = uitoggletool('parent',H.UITOOLBAR,...
    890909                                  'CData',btn_cdata.cdata.move,...
     
    956975set([H.UITOGGLE_ARROW,H.UITOGGLE_PAN,...
    957976     H.UITOGGLE_DRAWROI,H.UITOGGLE_ERASEROI,H.UITOGGLE_MOVEROI,...
    958      H.UITOGGLE_MOVEROI3D],...
     977     H.UITOGGLE_MOVEROI3D,H.UITOGGLE_FILLROI],...
    959978    'userdata',[H.UITOGGLE_ARROW,H.UITOGGLE_PAN,...
    960979                H.UITOGGLE_DRAWROI,H.UITOGGLE_ERASEROI,H.UITOGGLE_MOVEROI,...
    961                 H.UITOGGLE_MOVEROI3D])
     980                H.UITOGGLE_MOVEROI3D,H.UITOGGLE_FILLROI])
    962981
    963982
     
    10571076                        'style','frame',...
    10581077                        'units','pixel',...
    1059                         'position',[5 fig_pos(4)-125-2 ...
    1060                     232-10 125],...%135
     1078                        'position',[5 fig_pos(4)-105-2 ...
     1079                    232-10 105],...%135
    10611080                        'backgroundcolor',GD.col.frame);
    10621081
     
    10661085H.SLICE_TOOLS_TX = uicontrol('parent',H.FIG,...
    10671086                             'units','pixel',...
    1068                              'position',[tmp(1)+5 tmp(2)+tmp(4)-18 150 13],...
     1087                             'position',[tmp(1)+5 tmp(2)+tmp(4)-20 150 15],...
    10691088                             'style','text',...
    10701089                             'horizontalalign','left',...
    10711090                             'fontweight','bold',...
    10721091                             'backgroundcolor',GD.col.frame,...
    1073                              'string','Slice Viewing Tools');
     1092                             'string','Image Coordinates');
    10741093
    10751094% Volume popup
     
    10981117H.SL_SLIDER = uicontrol('parent',H.FIG,...
    10991118                        'units','pixel',...
    1100                         'position',[tmp(1)+5 tmp(2)+80 215 20],...
     1119                        'position',[tmp(1)+5 tmp(2)+60 215 20],...
    11011120                        'style','slider',...
    11021121                        'backgroundcolor',GD.col.slider);
     
    11291148H.X_BTN = uicontrol('parent',H.FIG,...
    11301149                    'units','pixel',...
    1131                     'position',[tmp(1)+5 tmp(2)+55 30 22],...
     1150                    'position',[tmp(1)+5 tmp(2)+35 30 22],...
    11321151                    'style','togglebutton',...
    11331152                    'fontweight','bold',...
     
    12111230% Crossbars
    12121231tmp=get(H.SLICE_TOOLS,'pos');
    1213 H.SHOW_CROSSBARS = uicontrol('parent',H.FIG,...
    1214                              'units','pixel',...
    1215                              'position',[tmp(1)+5 tmp(2)+25 130 20],...
    1216                              'style','checkbox',...
    1217                              'fontweight','normal',...
    1218                              'string','Show Crossbars',...
    1219                              'backgroundcolor',GD.col.frame,...
    1220                              'value',0,...
    1221                              'callback',@l_ShowHideCrossbars);
     1232% H.SHOW_CROSSBARS = uicontrol('parent',H.FIG,...
     1233%                              'units','pixel',...
     1234%                              'position',[tmp(1)+5 tmp(2)+25 130 20],...
     1235%                              'style','checkbox',...
     1236%                              'fontweight','normal',...
     1237%                              'string','Show Crossbars',...
     1238%                              'backgroundcolor',GD.col.frame,...
     1239%                              'value',0,...
     1240%                              'callback',@l_ShowHideCrossbars);
    12221241
    12231242H.VOXEL_VALUE_TX = uicontrol('parent',H.FIG,...
    12241243                             'units','pixel',...
    1225                              'position',[tmp(1)+5 tmp(2)+5 tmp(3)/2-25 13],...
     1244                             'position',[tmp(1)+5 tmp(2)+20 130 13],...
    12261245                             'style','text',...
    12271246                             'fontweight','normal',...
    1228                              'string','Voxel value:',...
     1247                             'string','Current pixel value:',...
    12291248                                                                                                                 'horizontalalign','left',...
    12301249                             'backgroundcolor',GD.col.frame);                                                                                                   
     
    12321251H.VOXEL_VALUE = uicontrol('parent',H.FIG,...
    12331252                             'units','pixel',...
    1234                              'position',[tmp(1)+tmp(3)/2-15 tmp(2)+5 tmp(3)/2+10 13],...
     1253                             'position',[tmp(1)+5 tmp(2)+5 130 13],...
    12351254                             'style','text',...
    12361255                             'fontweight','normal',...
     
    12411260tmp=get(H.SLICE_TOOLS,'position');
    12421261fig_pos = get(H.FIG,'position');
    1243 %% Contrast/Brightness/Gamma tools frame
    1244 H.CONTRAST_TOOLS=uicontrol('parent',H.FIG,...
     1262%% Window/Level tools frame
     1263H.WINDOWLEVEL_TOOLS=uicontrol('parent',H.FIG,...
    12451264                           'style','frame',...
    12461265                           'units','pixel',...
    1247                            'position',[tmp(1) tmp(2)-5-230 ...
    1248                     tmp(3) 230],...
     1266                           'position',[tmp(1) tmp(2)-5-220 ...
     1267                    tmp(3) 220],...
    12491268                           'backgroundcolor',GD.col.frame);
    12501269
    12511270
    1252 % Contrast/Brightness/Gamma text
    1253 tmp=get(H.CONTRAST_TOOLS,'position');
    1254 H.CONTRAST_TOOLS_TX = uicontrol('parent',H.FIG,...
     1271% Window/Level text
     1272tmp=get(H.WINDOWLEVEL_TOOLS,'position');
     1273H.WINDOWLEVEL_TOOLS_TX = uicontrol('parent',H.FIG,...
    12551274                                'units','pixel',...
    12561275                                'position',[tmp(1)+5 tmp(2)+tmp(4)-18 150 13],...
     
    12591278                                'fontweight','bold',...
    12601279                                'backgroundcolor',GD.col.frame,...
    1261                                 'string','Contrast Tools');
    1262 
    1263 
    1264 % Contrast slider ------------------------------
    1265 tmp=get(H.CONTRAST_TOOLS,'position');
    1266 H.CONTRAST_SLIDER = uicontrol('parent',H.FIG,...
     1280                                'string','Window/Level');
     1281
     1282
     1283% Window slider ------------------------------
     1284tmp=get(H.WINDOWLEVEL_TOOLS,'position');
     1285H.WINDOW_SLIDER = uicontrol('parent',H.FIG,...
    12671286                              'units','pixel',...
    1268                               'position',[tmp(1)+5 tmp(2)+175 173 18],...
     1287                              'position',[tmp(1)+5 tmp(2)+165 173 18],...
    12691288                              'style','slider',...
    12701289                              'min',0,...
    12711290                              'max',100,...
    12721291                              'value',100,...
    1273                               'sliderstep',[0.005 0.1],...
     1292                              'sliderstep',[0.01 0.1],...
    12741293                              'backgroundcolor',GD.col.slider);
    1275 tmp=get(H.CONTRAST_SLIDER,'position');
    1276 % Contrast Edit box
    1277 H.CONTRAST_EDIT = uicontrol('parent',H.FIG,...
     1294tmp=get(H.WINDOW_SLIDER,'position');
     1295% Window Edit box
     1296H.WINDOW_EDIT = uicontrol('parent',H.FIG,...
    12781297                            'units','pixel',...
    12791298                            'position',[tmp(1)+tmp(3)+3 tmp(2) 37 tmp(4)],...
     
    12811300                            'backgroundcolor','w',...
    12821301                            'string','',...
    1283                             'callback',@l_SetContrastBrightnessGamma);
    1284 % Contrast text
     1302                            'callback',@l_SetWindowLevel);
     1303% Window text
    12851304h1 = uicontrol('parent',H.FIG,...
    12861305               'units','pixel',...
     
    12891308               'horizontalalign','left',...
    12901309               'backgroundcolor',GD.col.frame,...
    1291                'string','Contrast (0% - 100%)');
    1292 
    1293 % Brightness slider ---------------------------------
    1294 tmp=get(H.CONTRAST_SLIDER,'position');
     1310               'string','Window (0% - 100%)');
     1311
     1312% Level slider ---------------------------------
     1313tmp=get(H.WINDOW_SLIDER,'position');
    12951314tmp_gap=20;
    1296 H.BRIGHTNESS_SLIDER = uicontrol('parent',H.FIG,...
     1315H.LEVEL_SLIDER = uicontrol('parent',H.FIG,...
    12971316                                'units','pixel',...
    12981317                                'position',[tmp(1) tmp(2)-tmp(4)-tmp_gap tmp(3) tmp(4)],...
    12991318                                'style','slider',...
    1300                                 'min',-100,...
    1301                                 'max',100,...
     1319                                'min',-50,...
     1320                                'max',50,...
    13021321                                'value',0,...
    1303                                 'sliderstep',[0.0025 0.1],...
     1322                                'sliderstep',[0.01 0.1],...
    13041323                                'backgroundcolor',GD.col.slider);
    1305 tmp=get(H.BRIGHTNESS_SLIDER,'position');
    1306 % Contrast Edit box
    1307 H.BRIGHTNESS_EDIT = uicontrol('parent',H.FIG,...
     1324tmp=get(H.LEVEL_SLIDER,'position');
     1325% Level Edit box
     1326H.LEVEL_EDIT = uicontrol('parent',H.FIG,...
    13081327                              'units','pixel',...
    13091328                              'position',[tmp(1)+tmp(3)+3 tmp(2) 37 tmp(4)],...
     
    13111330                              'backgroundcolor','w',...
    13121331                              'string','',...
    1313                               'callback',@l_SetContrastBrightnessGamma);
    1314 % Brightness text
     1332                              'callback',@l_SetWindowLevel);
     1333% Level text
    13151334h1 = uicontrol('parent',H.FIG,...
    13161335               'units','pixel',...
    1317                'position',[tmp(1) tmp(2)+tmp(4)+2 150 12],...
     1336               'position',[tmp(1) tmp(2)+tmp(4)+2 170 12],...
    13181337               'style','text',...
    13191338               'horizontalalign','left',...
    13201339               'backgroundcolor',GD.col.frame,...
    1321                'string','Brightness (-100 - +100)');
    1322 
    1323 % Gamma slider ---------------------------------
    1324 tmp=get(H.BRIGHTNESS_SLIDER,'position');
    1325 H.GAMMA_SLIDER = uicontrol('parent',H.FIG,...
    1326                            'units','pixel',...
    1327                            'position',[tmp(1) tmp(2)-tmp(4)-tmp_gap tmp(3) tmp(4)],...
    1328                            'style','slider',...
    1329                            'min',0.01,...
    1330                            'max',4.99,...
    1331                            'value',1,...
    1332                            'sliderstep',[0.002008 0.1],...
    1333                            'backgroundcolor',GD.col.slider);
    1334 tmp=get(H.GAMMA_SLIDER,'position');
    1335 % Gamma Edit box
    1336 H.GAMMA_EDIT = uicontrol('parent',H.FIG,...
    1337                          'units','pixel',...
    1338                          'position',[tmp(1)+tmp(3)+3 tmp(2) 37 tmp(4)],...
    1339                          'style','edit',...
    1340                          'backgroundcolor','w',...
    1341                          'string','',...
    1342                          'callback',@l_SetContrastBrightnessGamma);
    1343 % Gamma text
    1344 h1 = uicontrol('parent',H.FIG,...
    1345                'units','pixel',...
    1346                'position',[tmp(1) tmp(2)+tmp(4)+2 150 12],...
    1347                'style','text',...
    1348                'horizontalalign','left',...
    1349                'backgroundcolor',GD.col.frame,...
    1350                'string','Gamma (0.01 - 4.99)');
     1340               'string','Level (-50% - 50%)');
     1341
    13511342if ~Dat.HG2graphics
    13521343if Dat.MatlabVersion>7.03
    1353   ContrastSliderListener = handle.listener(H.CONTRAST_SLIDER,...
    1354           'ActionEvent',@l_SetContrastBrightnessGamma);
    1355         BrightnessSliderListener = handle.listener(H.BRIGHTNESS_SLIDER,...
    1356           'ActionEvent',@l_SetContrastBrightnessGamma);
    1357         GammaSliderListener = handle.listener(H.GAMMA_SLIDER,...
    1358           'ActionEvent',@l_SetContrastBrightnessGamma);
    1359         setappdata(H.CONTRAST_SLIDER,'HandleListeners',...
    1360           [ContrastSliderListener,BrightnessSliderListener,...
    1361           GammaSliderListener])
     1344  WindowSliderListener = handle.listener(H.WINDOW_SLIDER,...
     1345          'ActionEvent',@l_SetWindowLevel);
     1346        LevelSliderListener = handle.listener(H.LEVEL_SLIDER,...
     1347          'ActionEvent',@l_SetWindowLevel);
     1348        setappdata(H.WINDOW_SLIDER,'HandleListeners',...
     1349          [WindowSliderListener,LevelSliderListener])
    13621350else
    13631351  if feature('javafigures')
    1364         ContrastSliderListener = handle.listener(H.CONTRAST_SLIDER,...
    1365           'ActionEvent',@l_SetContrastBrightnessGamma);
    1366         BrightnessSliderListener = handle.listener(H.BRIGHTNESS_SLIDER,...
    1367           'ActionEvent',@l_SetContrastBrightnessGamma);
    1368         GammaSliderListener = handle.listener(H.GAMMA_SLIDER,...
    1369           'ActionEvent',@l_SetContrastBrightnessGamma);
    1370         setappdata(H.CONTRAST_SLIDER,'HandleListeners',...
    1371           [ContrastSliderListener,BrightnessSliderListener,...
    1372           GammaSliderListener])
     1352        WindowSliderListener = handle.listener(H.WINDOW_SLIDER,...
     1353          'ActionEvent',@l_SetWindowLevel);
     1354        LevelSliderListener = handle.listener(H.LEVEL_SLIDER,...
     1355          'ActionEvent',@l_SetWindowLevel);
     1356        setappdata(H.WINDOW_SLIDER,'HandleListeners',...
     1357          [WindowSliderListener,LevelSliderListener])
    13731358  else
    1374         set(H.CONTRAST_SLIDER,'callback',@l_SetContrastBrightnessGamma)
    1375         set(H.BRIGHTNESS_SLIDER,'callback',@l_SetContrastBrightnessGamma)
    1376         set(H.GAMMA_SLIDER,'callback',@l_SetContrastBrightnessGamma)
     1359        set(H.WINDOW_SLIDER,'callback',@l_SetWindowLevel)
     1360        set(H.LEVEL_SLIDER,'callback',@l_SetWindowLevel)
    13771361  end
    13781362end
    13791363else
    1380         ContrastSliderListener = addlistener(H.CONTRAST_SLIDER,...
    1381           'ContinuousValueChange',@l_SetContrastBrightnessGamma);
    1382         BrightnessSliderListener = addlistener(H.BRIGHTNESS_SLIDER,...
    1383           'ContinuousValueChange',@l_SetContrastBrightnessGamma);
    1384         GammaSliderListener = addlistener(H.GAMMA_SLIDER,...
    1385           'ContinuousValueChange',@l_SetContrastBrightnessGamma);
    1386         setappdata(H.CONTRAST_SLIDER,'HandleListeners',...
    1387           [ContrastSliderListener,BrightnessSliderListener,...
    1388           GammaSliderListener])
    1389 end
    1390 tmp=get(H.GAMMA_SLIDER,'position');
    1391 
    1392 % Contrast autobalance
    1393 H.CONTRAST_AUTO = uicontrol('parent',H.FIG,...
     1364        WindowSliderListener = addlistener(H.WINDOW_SLIDER,...
     1365          'ContinuousValueChange',@l_SetWindowLevel);
     1366        LevelSliderListener = addlistener(H.LEVEL_SLIDER,...
     1367          'ContinuousValueChange',@l_SetWindowLevel);
     1368        setappdata(H.WINDOW_SLIDER,'HandleListeners',...
     1369          [WindowSliderListener,LevelSliderListener])
     1370end
     1371tmp=get(H.LEVEL_SLIDER,'position');
     1372% Clim Min text
     1373H.CLIMRANGETEXT = uicontrol('parent',H.FIG,...
     1374                          'units','pixel',...
     1375                          'position',...
     1376                          [10 tmp(2)-25 50 15],...
     1377                          'string','Range:',...
     1378                          'horizontalalign','left',...
     1379                          'style','text',...
     1380                          'backgroundcolor',GD.col.frame);
     1381tmp=get(H.CLIMRANGETEXT,'position');
     1382H.CLIMMINEDIT = uicontrol('parent',H.FIG,...
     1383                          'units','pixel',...
     1384                          'position',...
     1385                          [tmp(1)+tmp(3)+5 tmp(2) 60 18],...
     1386                          'string','',...
     1387                          'style','edit',...
     1388                          'backgroundcolor','w',...
     1389                          'callback',@l_ChangeClim);
     1390tmp=get(H.CLIMMINEDIT,'position');
     1391% % Clim Max text
     1392H.CLIMMAXTEXT = uicontrol('parent',H.FIG,...
     1393                          'units','pixel',...
     1394                          'position',...
     1395                          [tmp(1)+tmp(3)+5 tmp(2) 25 15],...
     1396                          'string','-',...
     1397                          'horizontalalign','center',...
     1398                          'style','text',...
     1399                          'backgroundcolor',GD.col.frame);
     1400% tmp=get(H.CLIMMAXTEXT,'position');
     1401% Max (Clim(2))
     1402H.CLIMMAXEDIT = uicontrol('parent',H.FIG,...
     1403                          'units','pixel',...
     1404                          'position',...
     1405                          [tmp(1)+tmp(3)+35 tmp(2) 60 18],...
     1406                          'string','',...
     1407                          'style','edit',...
     1408                          'backgroundcolor','w',...
     1409                          'callback',@l_ChangeClim);
     1410tmp=get(H.CLIMMINEDIT,'position');
     1411% Clim range behavior text
     1412H.CLIMRANGEBEHTEXT = uicontrol('parent',H.FIG,...
     1413        'units','pixel',...
     1414        'position',...
     1415        [10 tmp(2)-25 200 15],...
     1416        'string','Range in image stack:',...
     1417        'horizontalalign','left',...
     1418        'style','text',...
     1419        'backgroundcolor',GD.col.frame);
     1420tmp=get(H.CLIMMINEDIT,'position');
     1421% Clim range popup
     1422H.CLIMRANGE_POPUP = uicontrol('parent',H.FIG,...
     1423                              'units','pixel',...
     1424                              'position',...
     1425                              [10 tmp(2)-45 210 20],...
     1426                              'string',{'Range fixed (all images)',...
     1427                    'Range fixed (image)','Range image min-max','Range auto-balanced W/L'},...
     1428                              'horizontalalign','left',...
     1429                              'style','popup',...
     1430                              'enable','on',...
     1431                              'value',1,...
     1432                              'callback',@l_ChangeClimRange,...
     1433                              'backgroundcolor','w');
     1434
     1435% Window/level autobalance
     1436tmp=get(H.CLIMRANGE_POPUP,'position');
     1437H.WINDOWLEVEL_AUTO = uicontrol('parent',H.FIG,...
    13941438                            'units','pixel',...
    13951439                            'position',...
    1396                             [tmp(1) tmp(2)-tmp(4)-25 35 35],...
     1440                            [tmp(1) tmp(2)-tmp(4)-30 35 35],...
    13971441                            'string','',...
    13981442                            'CData',btn_cdata.cdata.contrast,...
    1399                             'tooltip','Contrast auto-balance',...
     1443                            'tooltip','Window/level auto-balance',...
    14001444                            'style','pushbutton',...
    1401                             'callback',@l_SetAutoContrast);
    1402 tmp=get(H.CONTRAST_AUTO,'position');
     1445                            'callback',@l_SetAutoWindowLevel);
     1446tmp=get(H.WINDOWLEVEL_AUTO,'position');
    14031447H.CONTRAST_INVERT = uicontrol('parent',H.FIG,...
    14041448                              'units','pixel',...
     
    14341478
    14351479
    1436 tmp=get(H.CONTRAST_AUTO,'position');
    1437 % Clim Min text
    1438 H.CLIMMINTEXT = uicontrol('parent',H.FIG,...
    1439                           'units','pixel',...
    1440                           'position',...
    1441                           [10 tmp(2)-25 50 15],...
    1442                           'string','Clim Min:',...
    1443                           'horizontalalign','left',...
    1444                           'style','text',...
    1445                           'backgroundcolor',GD.col.frame);
    1446 tmp=get(H.CLIMMINTEXT,'position');
    1447 % Min (Clim(1))
    1448 H.CLIMMINEDIT = uicontrol('parent',H.FIG,...
    1449                           'units','pixel',...
    1450                           'position',...
    1451                           [tmp(1)+tmp(3) tmp(2) 50 18],...
    1452                           'string','',...
    1453                           'style','edit',...
    1454                           'backgroundcolor','w',...
    1455                           'callback',@l_ChangeClim);
    1456 tmp=get(H.CLIMMINEDIT,'position');
    1457 % Clim Max text
    1458 H.CLIMMAXTEXT = uicontrol('parent',H.FIG,...
    1459                           'units','pixel',...
    1460                           'position',...
    1461                           [tmp(1)+tmp(3)+11 tmp(2) 50 15],...
    1462                           'string','Clim Max:',...
    1463                           'horizontalalign','left',...
    1464                           'style','text',...
    1465                           'backgroundcolor',GD.col.frame);
    1466 tmp=get(H.CLIMMAXTEXT,'position');
    1467 % Max (Clim(2))
    1468 H.CLIMMAXEDIT = uicontrol('parent',H.FIG,...
    1469                           'units','pixel',...
    1470                           'position',...
    1471                           [tmp(1)+tmp(3) tmp(2) 50 18],...
    1472                           'string','',...
    1473                           'style','edit',...
    1474                           'backgroundcolor','w',...
    1475                           'callback',@l_ChangeClim);
    1476 
    1477 tmp=get(H.CLIMMINTEXT,'position');
    1478 % Clim Range text
    1479 H.CLIMRANGE_TX = uicontrol('parent',H.FIG,...
    1480                            'units','pixel',...
    1481                            'position',...
    1482                            [10 tmp(2)-25 50 15],...
    1483                            'string','Clim range:',...
    1484                            'horizontalalign','left',...
    1485                            'style','text',...
    1486                            'backgroundcolor',GD.col.frame);
    1487 
    1488 tmp=get(H.CLIMRANGE_TX,'position');
    1489 % Clim range popup
    1490 H.CLIMRANGE_POPUP = uicontrol('parent',H.FIG,...
    1491                               'units','pixel',...
    1492                               'position',...
    1493                               [tmp(1)+tmp(3)+5 tmp(2)+5 155 15],...
    1494                               'string',{'locked (global)',...
    1495                     'locked (slice)','unlocked (min/max)','unlocked (auto-balanced)'},...
    1496                               'horizontalalign','left',...
    1497                               'style','popup',...
    1498                               'enable','on',...
    1499                               'value',1,...
    1500                               'callback',@l_ChangeClimRange,...
    1501                               'backgroundcolor','w');
     1480
    15021481
    15031482
    15041483%% Analyze tools ------------------------
    1505 tmp = get(H.CONTRAST_TOOLS,'position');
     1484tmp = get(H.WINDOWLEVEL_TOOLS,'position');
    15061485H.ANALYZE_TOOLS = uicontrol('parent',H.FIG,...H.SIDEBAR,...
    15071486'style','frame',...
    15081487    'units','pixel',...
    1509     'position',[tmp(1) tmp(2)-288-5 tmp(3) 288],...%[tmp(1) tmp(2)-348-5+40 tmp(3) 308],...
     1488    'position',[tmp(1) tmp(2)-318-5 tmp(3) 318],...%[tmp(1) tmp(2)-348-5+40 tmp(3) 308],...
    15101489    'backgroundcolor',GD.col.frame);
    15111490
     
    15341513               'position',[10 tmp(2)+tmp(4)-20 200 14],...%[10 332-40 200 14],...
    15351514               'style','text',...
    1536                'string','ROI Analysis Tools',...
     1515               'string','ROI Analysis',...
    15371516               'horizontalalign','left',...
    15381517               'fontweight','bold',...
    1539                'fontsize',8,...
    15401518               'backgroundcolor',GD.col.frame);
    15411519
     
    15451523                           'style','frame',...
    15461524                           'units','pixel',...
    1547                            'position',[tmp(1) tmp(2)-50 212 50]);%[10 259-40 212 70]);
     1525                           'position',[tmp(1) tmp(2)-55 212 50]);%[10 259-40 212 70]);
    15481526tmp=get(H.ROITOOLS_FRAME,'position');
    1549 % $$$ H.DRAW_ROI(1)=uicontrol('parent',H.FIG,...
    1550 % $$$                         'style','radio',...
    1551 % $$$                         'units','pixel',...
    1552 % $$$                         'value',0,...
    1553 % $$$                         'position',[22 tmp(2)+28 150 18],...
    1554 % $$$                         'string','Draw/Edit ROI',...
    1555 % $$$                         'callback',['set(get(gcbo,''userdata''),''value'',0),'...
    1556 % $$$                     'set(gcbo,''value'',1)']);
    1557 % $$$ H.DRAW_ROI(2)=uicontrol('parent',H.FIG,...
    1558 % $$$                         'style','radio',...
    1559 % $$$                         'units','pixel',...
    1560 % $$$                         'value',1,...
    1561 % $$$                         'position',[22 tmp(2)+7 150 18],...
    1562 % $$$                         'string','Change View/Contrast',...
    1563 % $$$                         'callback',['set(get(gcbo,''userdata''),''value'',0),'...
    1564 % $$$                     'set(gcbo,''value'',1)']);
    1565 % $$$ set(H.DRAW_ROI,'userdata',H.DRAW_ROI)
    1566 % $$$ h3=uicontrol('parent',H.FIG,...
    1567 % $$$              'units','pixel',...
    1568 % $$$              'position',[15 tmp(2)+49 150 0.2*70],...
    1569 % $$$              'style','text',...
    1570 % $$$              'string','ROI Tools',...
    1571 % $$$              'horizontalalign','left',...
    1572 % $$$              'fontweight','normal',...
    1573 % $$$              'fontsize',8);%'backgroundcolor','r');
     1527
    15741528
    15751529
     
    16321586                          'style','pushbutton',...
    16331587                          'units','pixel',...
    1634                           'position',[tmp(1) tmp(2)-65 40 40],...
     1588                          'position',[tmp(1) tmp(2)-70 40 40],...
    16351589                          'string','',...
    16361590                          'fontweight','bold',...
     
    16501604                          'tooltip','Save ROI(s)',...
    16511605                          'callback',@l_RoiSave);
    1652 
    1653 
     1606tmp=get(H.ROIBTN_SAVE,'position');
     1607H.ROIBTN_STATS = uicontrol('parent',H.FIG,...
     1608                          'style','pushbutton',...
     1609                          'units','pixel',...
     1610                          'position',[tmp(1) tmp(2)-tmp(4)-5 tmp(3:4)],...
     1611                          'string','',...
     1612                          'fontweight','bold',...
     1613                          'enable','off',...
     1614                          'CData',btn_cdata.cdata.statistics_large,...
     1615                          'tooltip','View ROI statistics',...
     1616                          'callback',@l_RoiViewStats);
     1617tmp=get(H.ROIBTN_LOAD,'position');
    16541618% ROI selection listbox
    16551619%uicm=uicontextmenu;
     
    16711635h1=uicontrol('parent',H.FIG,...
    16721636             'units','pixel',...
    1673              'position',[tmp(1) tmp(2)+tmp(4)+2 66 14],...
     1637             'position',[tmp(1) tmp(2)+tmp(4)+2 86 14],...
    16741638             'style','text',...
    16751639             'string','View ROI(s)',...
    16761640             'horizontalalign','left',...
    16771641             'fontweight','normal',...
    1678              'fontsize',8,...
    16791642             'backgroundcolor',GD.col.frame);
    16801643h1=uicontrol('parent',H.FIG,...
     
    16851648             'horizontalalign','left',...
    16861649             'fontweight','normal',...
    1687              'fontsize',8,...
    16881650             'backgroundcolor',GD.col.frame);
    16891651tmp=get(h1,'position');
     
    17001662h1 = uicontrol('parent',H.FIG,...
    17011663               'units','pixel',...
    1702                'position',[10 tmp(2)-25 133 14],...
     1664               'position',[10 tmp(2)-35 133 14],...
    17031665               'style','text',...
    17041666               'string','ROI Transparency',...
    17051667               'horizontalalign','left',...
    17061668               'fontweight','normal',...
    1707                'fontsize',8,...
    17081669               'backgroundcolor',GD.col.frame);
    17091670tmp=get(h1,'position');
     
    19811942H.UICH_ENABLED(end+1)=H.FILEMENU_EXPORT;
    19821943H.UICH_ENABLED(end+1)=H.UITOGGLE_COLORBAR;
     1944H.UICH_ENABLED(end+1)=H.UITOGGLE_CROSSHAIRS;
    19831945H.UICH_ENABLED(end+1)=H.UNFOLD_DATA;
    19841946
     
    19931955                    H.UITOGGLE_DRAWROI,...
    19941956                    H.UITOGGLE_ERASEROI,...
     1957                                                                                H.UITOGGLE_FILLROI,...
    19951958                    H.UITOGGLE_MOVEROI,...
    19961959                    H.UITOGGLE_MOVEROI3D,...
     
    20001963                    H.ROIBTN_DELALL,...
    20011964                    H.ROIBTN_SAVE,...
     1965                                                                                H.ROIBTN_STATS,...
    20021966                    H.ROI_EDIT,...
    20031967                    H.UIROISHOWEDGES,...
     
    22552219    end
    22562220  end
     2221
     2222        % If the data consists of multiple 2D files that are all of the same
     2223        % size, ask if the user wants to view them as 3D data.
     2224        if Read2Mixed
     2225                nFiles = length(DATA);
     2226                X = zeros(1,nFiles);
     2227                Y = zeros(1,nFiles);
     2228                for ii = 1:nFiles
     2229                        X(ii)=size(DATA{ii}.FTDATA,1);
     2230                        Y(ii)=size(DATA{ii}.FTDATA,2);
     2231                end
     2232                if all(X==X(1)) && all(Y==Y(1))
     2233                        resp = questdlg('Do you want to view data as a 3D data set or a 2D image stack?',...
     2234                                'View data 3D or 2D?','View as 3D data','View as 2D image stack','View as 2D image stack');
     2235                        if isempty(resp)
     2236                                viewAs3D = false;
     2237                        elseif strcmpi(resp,'View as 3D data')
     2238                                viewAs3D = true;
     2239                        else
     2240                                viewAs3D = false;
     2241                        end
     2242                        if viewAs3D
     2243                                tmp = DATA{1};
     2244                                tmp.FTDATA = zeros(X(1),Y(1),nFiles,class(DATA{1}.FTDATA));
     2245                                for ii = 1:nFiles
     2246                                        tmp.FTDATA(:,:,ii) = DATA{ii}.FTDATA;
     2247                                        DATA{ii}.FTDATA=[];
     2248                                end
     2249                                DATA=[];
     2250                                DATA=tmp;
     2251                        end
     2252                end
     2253        end
    22572254 
    22582255  % Remove skipped volumes
     
    23002297  DATA{1}=rmfield(DATA{1},'DataRotation');
    23012298  DATA{1}=rmfield(DATA{1},'DataFlip');
    2302 end
    2303 if isfield(DATA{1},'SliceClim')
    2304   Dat.SliceClim = DATA{1}.SliceClim;
    2305   DATA{1}=rmfield(DATA{1},'SliceClim');
    23062299end
    23072300if isfield(DATA{1},'RotateFlip3d')
     
    23332326% Initialize GUI
    23342327l_Initialize([],[]);
     2328
     2329if isfield(DATA{1},'SliceClim')
     2330  Dat.SliceClim = DATA{1}.SliceClim;
     2331  DATA{1}=rmfield(DATA{1},'SliceClim');
     2332        set(H.CLIMRANGE_POPUP,'value',2)
     2333        l_ChangeClimRange([],[])
     2334end
    23352335
    23362336%% If the ROI-structure has been given in file load time, refresh ROIs
     
    28322832end
    28332833
    2834 % Set mouse for changing contrast
     2834% Set mouse for changing window/level
    28352835set(get(H.UITOGGLE_ARROW,'userdata'),'state','off')
    28362836set(H.UITOGGLE_ARROW,'state','on')
     
    28462846delete(H.CROSSBAR_LN)
    28472847H.CROSSBAR_LN=[];
    2848 set(H.SHOW_CROSSBARS,'value',0)
     2848%set(H.SHOW_CROSSBARS,'value',0)
    28492849
    28502850% Reset image sliders
     
    28542854% Reset uitoolbar buttons
    28552855set([H.UIPUSH_ZOOMIN,H.UIPUSH_ZOOMOUT,H.UITOGGLE_ZOOMNORM],'enable','off')
    2856 set([H.UITOGGLE_VIEW3D,H.UITOGGLE_VIEWY,H.UITOGGLE_VIEWZ],'state','off')
     2856set([H.UITOGGLE_VIEW3D,H.UITOGGLE_VIEWY,H.UITOGGLE_VIEWZ,H.UITOGGLE_CROSSHAIRS],'state','off')
    28572857set([H.UITOGGLE_ARROW,H.UITOGGLE_PAN,...
    28582858     H.UITOGGLE_DRAWROI,H.UITOGGLE_ERASEROI,H.UITOGGLE_MOVEROI,...
    2859      H.UITOGGLE_MOVEROI3D,H.UITOGGLE_GRID],...
     2859     H.UITOGGLE_MOVEROI3D,H.UITOGGLE_GRID,H.UITOGGLE_CROSSHAIRS],...
    28602860    'enable','off')
    28612861set([H.UIPUSH_NEWROI,H.UIPUSH_UNDOROI],...
     
    29192919% Reset figure window title
    29202920set(H.FIG,'Name','Aedes 1.0')
     2921
     2922% Update Voxel Value text
     2923set(H.VOXEL_VALUE,'string','-')
    29212924
    29222925%% Place blank frame in front of gui
     
    30453048
    30463049% Get default Clim behavior from preferences -------------
    3047 try
    3048   Dat.LockClim = getpref('Aedes','LockClim');
    3049   if Dat.LockClim==0
    3050     val=3;
    3051   elseif Dat.LockClim==1
    3052     val=1;
    3053   elseif Dat.LockClim==2
    3054     val=2;
    3055   else
    3056     val=4;
    3057   end
    3058 catch
    3059   Dat.LockClim = 1; % 0 = clim unlocked
     3050% try
     3051%   Dat.LockClim = getpref('Aedes','LockClim');
     3052%   if Dat.LockClim==0
     3053%     val=3;
     3054%   elseif Dat.LockClim==1
     3055%     val=1;
     3056%   elseif Dat.LockClim==2
     3057%     val=2;
     3058%   else
     3059%     val=4;
     3060%   end
     3061% catch
     3062  Dat.LockClim = 0; % 0 = clim unlocked
    30603063                    % 1 = clim locked global
    30613064                    % 2 = clim locked slice
    30623065                    % 3 = clim unlocked and auto-balanced
    3063   val = 1;
    3064 end
     3066  val = 3;
     3067% end
    30653068
    30663069% Set Clim values ----------------------------------
     
    32483251l_ChangeColorbarLimits([],[])
    32493252
    3250 % Set default Contrast, Brightness, and Gamma.
     3253% Set default Window, Level, and Gamma.
    32513254% Store current valid value in the userdata...
    3252 Dat.Contrast = 100;
    3253 Dat.Brightness = 0;
    3254 Dat.Gamma = 1;
    3255 set(H.CONTRAST_EDIT,'string',num2str(Dat.Contrast),...
    3256   'userdata',Dat.Contrast)
    3257 set(H.BRIGHTNESS_EDIT,'string',num2str(Dat.Brightness),...
    3258   'userdata',Dat.Brightness)
    3259 set(H.GAMMA_EDIT,'string',num2str(Dat.Gamma),...
    3260   'userdata',Dat.Gamma)
     3255Dat.Window = 100;
     3256Dat.Level = 0;
     3257set(H.WINDOW_EDIT,'string',num2str(Dat.Window),...
     3258  'userdata',Dat.Window)
     3259set(H.LEVEL_EDIT,'string',num2str(Dat.Level),...
     3260  'userdata',Dat.Level)
    32613261
    32623262
     
    34583458                    'enable','on')
    34593459  end
     3460
     3461        set(H.CLIMRANGE_POPUP,'enable','on','value',3)
    34603462else
    34613463  if Dat.ImageDim(Dat.DataInd,3)==1
     
    34843486  set(H.UIMENU_ROTATEFLIP3D,'enable','on')
    34853487  set(H.UIMENU_ROTATEFLIP,'enable','off')
    3486 end
    3487 
    3488 
    3489 % Reset contrast/brightness/gamma sliders
    3490 set(H.CONTRAST_SLIDER,'value',100)
    3491 set(H.BRIGHTNESS_SLIDER,'value',0)
    3492 set(H.GAMMA_SLIDER,'value',1)
     3488        set(H.CLIMRANGE_POPUP,'value',3,'enable','off')
     3489end
     3490
     3491
     3492% Reset window/level sliders
     3493set(H.WINDOW_SLIDER,'value',100)
     3494set(H.LEVEL_SLIDER,'value',0)
    34933495
    34943496% Set file name to figure window title
     
    37923794l_DisplayData([],[])
    37933795
    3794 % Refresh brightness/contrast
    3795 l_SetContrastBrightnessGamma(0,[],Clim,0)
     3796% Refresh window/level
     3797l_SetWindowLevel(0,[],Clim,0)
    37963798
    37973799% Load ROI(s)
     
    51395141if strcmpi(get(H.UIVIEW_INFOTXTBACKGROUND,'checked'),'off')
    51405142  set([H.INFOTEXT,H.ROIINFOTEXT],...
    5141                     'backgroundcolor','w')
     5143                    'backgroundcolor','w','color','k')
    51425144        if ~Dat.HG2graphics
    51435145                set([H.INFOTEXT,H.ROIINFOTEXT],'erasemode','normal')
     
    51475149else
    51485150  set([H.INFOTEXT,H.ROIINFOTEXT],...
    5149                     'backgroundcolor','none')
     5151                    'backgroundcolor','none','color','k')
    51505152        if ~Dat.HG2graphics
    51515153                set([H.INFOTEXT,H.ROIINFOTEXT],'erasemode','xor')
     
    57185720
    57195721% Draw crossbars
    5720 if get(H.SHOW_CROSSBARS,'value')
     5722if strcmpi(get(H.UITOGGLE_CROSSHAIRS,'state'),'on')
    57215723  l_ShowHideCrossbars;
    57225724end
     
    57315733
    57325734% Refresh Clim if unlocked or slice locked
    5733 if any(Dat.LockClim==[0 2 3]) && Dat.isDataMixed
     5735if any(Dat.LockClim==[0 1 2 3]) && Dat.isDataMixed
    57345736  l_RefreshClim([],[]);
    57355737end
     
    59205922 
    59215923  % Hide crossbars from other axis if they are selected
    5922   if get(H.SHOW_CROSSBARS,'value')
     5924  if strcmpi(get(H.UITOGGLE_CROSSHAIRS,'state'),'on')
    59235925    set(H.CROSSBAR_LN(:,:),'visible','off')
    59245926    set(H.CROSSBAR_LN(vtype,:),'visible','on')
     
    59345936  Dat.AxView=0;
    59355937  set(H.IM,'visible','on')
    5936   if get(H.SHOW_CROSSBARS,'value')
     5938  if  strcmpi(get(H.UITOGGLE_CROSSHAIRS,'state'),'on')
    59375939    set(H.CROSSBAR_LN(:,:),'visible','on')
    59385940  end
     
    63096311function l_ShowHideCrossbars(h,evd)
    63106312try
    6311 if get(H.SHOW_CROSSBARS,'value') | ~isfield(H,'CROSSBAR_LN')
     6313if  strcmpi(get(H.UITOGGLE_CROSSHAIRS,'state'),'on') | ~isfield(H,'CROSSBAR_LN')
    63126314  % Draw crossbars
    63136315  ax_h = [H.IMAX1,H.IMAX2,H.IMAX3];
     
    63686370 
    63696371  % Set visibility for lines
    6370   if get(H.SHOW_CROSSBARS,'value')
     6372  if  strcmpi(get(H.UITOGGLE_CROSSHAIRS,'state'),'on')
    63716373    if any(Dat.AxView==[1 2 3])
    63726374      set(H.CROSSBAR_LN(Dat.AxView,:),'visible','on')
     
    63946396function l_UpdateIntensityValue(h,evd)
    63956397try
    6396 % Look for a quick return
    6397 if ~Dat.ShowColorbar
    6398   return
    6399 end
     6398       
     6399        % Get the current intensity value
     6400        IntVal=DATA{Dat.DataInd}.FTDATA(Dat.Slices(3),...
     6401                Dat.Slices(2),...
     6402                Dat.Slices(1),...
     6403                Dat.CurrentVol);
     6404       
     6405        % Update Voxel Value text
     6406        set(H.VOXEL_VALUE,'string',...
     6407                sprintf('%.2f',IntVal))
     6408       
     6409        % Look for a quick return
     6410        if ~Dat.ShowColorbar
     6411                return
     6412  end
    64006413
    64016414% Get the current intensity value
     
    64546467end
    64556468
    6456 % Update Voxel Value text
    6457 set(H.VOXEL_VALUE,'string',...
    6458                         sprintf('%.2f',IntVal))
    64596469
    64606470% Refresh axes
     
    72767286  if h==H.CLIMMINEDIT
    72777287    val = str2num(get(H.CLIMMINEDIT,'string'));
     7288                if isempty(val) && strcmpi(get(H.CLIMMINEDIT,'string'),'min')
     7289                        val = Dat.OrigClim(Dat.DataInd,1);
     7290                        set(H.CLIMMINEDIT,'string',num2str(val));
     7291                end
    72787292    if isempty(val) || ~isreal(val) || val>=Dat.Clim(2)
    72797293      set(H.CLIMMINEDIT,'string',num2str(get(H.CLIMMINEDIT,'userdata')))
     
    72847298  elseif h==H.CLIMMAXEDIT
    72857299    val = str2num(get(H.CLIMMAXEDIT,'string'));
     7300                if isempty(val) && strcmpi(get(H.CLIMMAXEDIT,'string'),'max')
     7301                        val = Dat.OrigClim(Dat.DataInd,2);
     7302                        set(H.CLIMMAXEDIT,'string',num2str(val));
     7303                end
    72867304    if isempty(val) || ~isreal(val) || val<=Dat.Clim(1)
    72877305      set(H.CLIMMAXEDIT,'string',num2str(get(H.CLIMMAXEDIT,'userdata')))
     
    72917309    set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2))
    72927310  else
    7293         set(H.CLIMMINEDIT,'userdata',Dat.Clim(1))
    7294         set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2))
    7295         set(H.CLIMMINEDIT,'string',num2str(get(H.CLIMMINEDIT,'userdata')))
    7296         set(H.CLIMMAXEDIT,'string',num2str(get(H.CLIMMAXEDIT,'userdata')))
     7311                set(H.CLIMMINEDIT,'userdata',Dat.Clim(1))
     7312                set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2))
     7313                set(H.CLIMMINEDIT,'string',num2str(get(H.CLIMMINEDIT,'userdata')))
     7314                set(H.CLIMMAXEDIT,'string',num2str(get(H.CLIMMAXEDIT,'userdata')))
    72977315  end
    72987316 
     
    73007318  set([H.IMAX1,H.IMAX2,H.IMAX3],'Clim',Dat.Clim)
    73017319 
    7302   % Save Clim values and change the range to slice locked position
    7303   if Dat.LockClim==2
    7304     Dat.SliceClim(Dat.DataInd,:)=Dat.Clim;
    7305   elseif Dat.LockClim==0 || Dat.LockClim==3
    7306     Dat.LockClim = 1;
    7307     set(H.CLIMRANGE_POPUP,'value',1)
    7308     %Dat.SliceClim(Dat.DataInd,:)=Dat.Clim;
    7309     setpref('Aedes','LockClim',Dat.LockClim);
    7310   end
    7311  
     7320%   % Save Clim values and change the range to slice locked position
     7321%       if Dat.isDataMixed
     7322%               if Dat.LockClim==2
     7323%                       Dat.SliceClim(Dat.DataInd,:)=Dat.Clim;
     7324%               elseif Dat.LockClim==0 || Dat.LockClim==3
     7325%                       Dat.LockClim = 1;
     7326%                       set(H.CLIMRANGE_POPUP,'value',1)
     7327%               end
     7328%       end
     7329       
     7330        % Save Clim values and change the range to slice locked position
     7331        if Dat.isDataMixed
     7332                if any(Dat.LockClim==[0,2,3])
     7333                        Dat.LockClim = 2;
     7334                        Dat.SliceClim(Dat.DataInd,:)=Dat.Clim;
     7335                        set(H.CLIMRANGE_POPUP,'value',2)
     7336                end
     7337        end
     7338
    73127339  % Refresh colorbar limits
    73137340  l_ChangeColorbarLimits([],[])
     7341
     7342        % Refresh window/level sliders
     7343        l_SetWindowLevel([],0,Dat.Clim,0)
    73147344 
    73157345  catch
     
    73337363  l_RefreshClim([],[])
    73347364elseif val==3
    7335   Dat.LockClim = 0; % Unlocked
     7365  Dat.LockClim = 0; % Unlocked min-max
    73367366  l_RefreshClim([],[])
    73377367elseif val==4
     
    73397369  l_RefreshClim([],[])
    73407370end
    7341 setpref('Aedes','LockClim',Dat.LockClim);
     7371%setpref('Aedes','LockClim',Dat.LockClim);
    73427372
    73437373catch
     
    73537383function l_RefreshClim(h,evd)
    73547384try
    7355  
    7356   %if ~Dat.isDataMixed
    7357   % return
    7358   %end
    73597385
    73607386if Dat.LockClim==0
    73617387  %% Clim unlocked
    73627388  Dat.Clim = Dat.OrigClim(Dat.DataInd,:);
     7389  l_SetWindowLevel(0,[],Dat.Clim,0)
     7390 
     7391elseif Dat.LockClim==1
     7392  %% Clim locked global
     7393        l_SetWindowLevel(0,[],Dat.Clim,0)
     7394 
     7395
     7396elseif Dat.LockClim==2
     7397  %% Clim locked slice
     7398  Dat.Clim = Dat.SliceClim(Dat.DataInd,:);
    73637399  %set([H.IMAX1,H.IMAX2,H.IMAX3],'Clim',Dat.Clim)
    73647400  %set(H.CLIMMINEDIT,'userdata',Dat.Clim(1),...
     
    73667402  %set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2),...
    73677403  %                  'string',num2str(Dat.Clim(2)))
    7368   l_SetContrastBrightnessGamma(0,[],Dat.Clim,0)
    7369  
    7370 elseif Dat.LockClim==1
    7371   %% Clim locked global
    7372  
    7373 elseif Dat.LockClim==2
    7374   %% Clim locked slice
    7375   Dat.Clim = Dat.SliceClim(Dat.DataInd,:);
    7376   set([H.IMAX1,H.IMAX2,H.IMAX3],'Clim',Dat.Clim)
    7377   set(H.CLIMMINEDIT,'userdata',Dat.Clim(1),...
    7378                     'string',num2str(Dat.Clim(1)))
    7379   set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2),...
    7380                     'string',num2str(Dat.Clim(2)))
    73817404 
    73827405  % Refresh colorbar limits
    7383   l_ChangeColorbarLimits([],[])
     7406  %l_ChangeColorbarLimits([],[])
     7407
     7408        l_SetWindowLevel(0,[],Dat.Clim,0)
    73847409 
    73857410elseif Dat.LockClim==3
    73867411  %% Clim unlocked with auto-balance
    7387   l_SetAutoContrast([],[])
    7388  
    7389   %Dat.Clim = Dat.OrigClim(Dat.DataInd,:);
    7390   %set([H.IMAX1,H.IMAX2,H.IMAX3],'Clim',Dat.Clim)
    7391   %set(H.CLIMMINEDIT,'userdata',Dat.Clim(1),...
    7392   %                  'string',num2str(Dat.Clim(1)))
    7393   %set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2),...
    7394   %                  'string',num2str(Dat.Clim(2)))
     7412  l_SetAutoWindowLevel([],[])
    73957413end
    73967414
     
    74037421%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    74047422%%
    7405 %% Modify Contrast/Brightness/Gamma
     7423%% Modify Window/Level
    74067424%%
    74077425%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    7408 function l_SetContrastBrightnessGamma(h,evd,clim_in,wbm)
     7426function l_SetWindowLevel(h,evd,clim_in,wbm)
    74097427try
    74107428if nargin==4
    74117429  if ~isempty(clim_in) & wbm==0
    7412     % Calculate contrast value and to two decimals
    7413     Dat.Contrast=(diff(clim_in)/diff(Dat.OrigClim(Dat.DataInd,:)))*100;
    7414     %Dat.Contrast = fix(Dat.Contrast*100)/100;
    7415    
    7416     % Calculate Brightness
    7417     Dat.Brightness = ((diff(clim_in)/2-(diff(Dat.OrigClim(Dat.DataInd,:))/2))./(diff(Dat.OrigClim(Dat.DataInd,:))/2))*100;
    7418     %Dat.Brightness = fix(Dat.Brightness*100)/100;
    7419    
    7420     % Make sure that contrast/brightness values are valid
    7421     Dat.Contrast = max(min(Dat.Contrast,100),0);
    7422     Dat.Brightness = max(min(Dat.Brightness,100),-100);
     7430                Dat.Clim = clim_in;
     7431
     7432                % Set Window and Level according to range
     7433                [Dat.Window,Dat.Level]=l_RangeToWindowLevel(clim_in);
    74237434   
    74247435    % Set slider values
    7425     set(H.CONTRAST_SLIDER,'value',Dat.Contrast)
    7426     set(H.BRIGHTNESS_SLIDER,'value',Dat.Brightness)
     7436    set(H.WINDOW_SLIDER,'value',Dat.Window)
     7437    set(H.LEVEL_SLIDER,'value',Dat.Level)
    74277438  else % The function is called from WindowButtonMotion
    74287439   
     
    74377448    xy=cp_old-cp;
    74387449   
    7439     % Use "tol" pixels to represent 1% shift in contrast
    7440     % and brightness...
    7441     tolx = 4; % Set 1% tolerance
    7442     toly = 2;
     7450    % Use "tol" pixels to represent 1% shift in window
     7451    % and level...
     7452    tolx = 1; % Set 1% tolerance
     7453    toly = 1;
    74437454   
    7444    
    7445     shift_contrast=xy(1)/tolx;
    7446     shift_brightness=xy(2)/toly;
    7447     Dat.Contrast = Dat.Contrast-shift_contrast;
    7448     Dat.Brightness = Dat.Brightness+shift_brightness;
    7449     Dat.Contrast = fix(Dat.Contrast*100)/100;
    7450     Dat.Brightness = fix(Dat.Brightness*100)/100;
     7455    shift_window=xy(1)/tolx;
     7456    shift_level=xy(2)/toly;
     7457    Dat.Window = Dat.Window-shift_window;
     7458    Dat.Level = Dat.Level+shift_level;
     7459    Dat.Window = floor(Dat.Window);
     7460    Dat.Level = floor(Dat.Level);
    74517461   
    74527462    % Make sure that values are within limits
    7453     Dat.Contrast = max(min(Dat.Contrast,100),0);
    7454     Dat.Brightness = max(min(Dat.Brightness,100),-100);
    7455    
     7463    Dat.Window = max(min(Dat.Window,100),0);
     7464    Dat.Level = max(min(Dat.Level,50),-50);
     7465                Dat.Clim = l_WindowLevelToRange([Dat.Window,Dat.Level]);
     7466
    74567467    % Set slider values
    7457     set(H.CONTRAST_SLIDER,'value',Dat.Contrast)
    74