Index: src/sas/qtgui/GUITests.py
===================================================================
--- src/sas/qtgui/GUITests.py	(revision 9290b1a2e57458d51b13f1acd1798b999372c7d7)
+++ src/sas/qtgui/GUITests.py	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
@@ -19,4 +19,5 @@
 from UnitTesting import DensityCalculatorTest
 from UnitTesting import WindowTitleTest
+from UnitTesting import SetGraphRangeTest
 
 def suite():
@@ -40,4 +41,5 @@
         unittest.makeSuite(DensityCalculatorTest.DensityCalculatorTest, 'test'),
         unittest.makeSuite(WindowTitleTest.WindowTitleTest, 'test'),
+        unittest.makeSuite(SetGraphRangeTest.SetGraphRangeTest, 'test'),
     )
     return unittest.TestSuite(suites)
Index: src/sas/qtgui/Plotter.py
===================================================================
--- src/sas/qtgui/Plotter.py	(revision 9290b1a2e57458d51b13f1acd1798b999372c7d7)
+++ src/sas/qtgui/Plotter.py	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
@@ -9,4 +9,5 @@
 from sas.qtgui.PlotterBase import PlotterBase
 from sas.qtgui.AddText import AddText
+from sas.qtgui.SetGraphRange import SetGraphRange
 
 class PlotterWidget(PlotterBase):
@@ -206,13 +207,27 @@
         Show a dialog allowing setting the chart ranges
         """
-        print("onSetGraphRange")
-        pass
+        # min and max of data
+        x_range = self.ax.get_xlim()
+        y_range = self.ax.get_ylim()
+        self.setRange = SetGraphRange(parent=self,
+            x_range=x_range, y_range=y_range)
+        if self.setRange.exec_() == QtGui.QDialog.Accepted:
+            x_range = self.setRange.xrange()
+            y_range = self.setRange.yrange()
+            if x_range is not None and y_range is not None:
+                self.ax.set_xlim(x_range)
+                self.ax.set_ylim(y_range)
+                self.canvas.draw_idle()
 
     def onResetGraphRange(self):
         """
-        Resets the chart X and Y ranges to the original values
-        """
-        print("onResetGraphRange")
-        pass
+        Resets the chart X and Y ranges to their original values
+        """
+        x_range = (self.data.x.min(), self.data.x.max())
+        y_range = (self.data.y.min(), self.data.y.max())
+        if x_range is not None and y_range is not None:
+            self.ax.set_xlim(x_range)
+            self.ax.set_ylim(y_range)
+            self.canvas.draw_idle()
 
     def xyTransform(self, xLabel="", yLabel=""):
Index: src/sas/qtgui/PlotterBase.py
===================================================================
--- src/sas/qtgui/PlotterBase.py	(revision 9290b1a2e57458d51b13f1acd1798b999372c7d7)
+++ src/sas/qtgui/PlotterBase.py	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
Index: src/sas/qtgui/SetGraphRange.py
===================================================================
--- src/sas/qtgui/SetGraphRange.py	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
+++ src/sas/qtgui/SetGraphRange.py	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
@@ -0,0 +1,39 @@
+"""
+Allows users to change the range of the current graph
+"""
+from PyQt4 import QtGui
+
+# Local UI
+from sas.qtgui.UI.SetGraphRangeUI import Ui_setGraphRangeUI
+
+class SetGraphRange(QtGui.QDialog, Ui_setGraphRangeUI):
+    def __init__(self, parent=None, x_range=(0.0, 0.0), y_range=(0.0, 0.0)):
+        super(SetGraphRange, self).__init__()
+
+        self.setupUi(self)
+        assert(isinstance(x_range, tuple))
+        assert(isinstance(y_range, tuple))
+
+        self.txtXmin.setValidator(QtGui.QDoubleValidator())
+        self.txtXmax.setValidator(QtGui.QDoubleValidator())
+        self.txtYmin.setValidator(QtGui.QDoubleValidator())
+        self.txtYmax.setValidator(QtGui.QDoubleValidator())
+
+        self.txtXmin.setText(str(x_range[0]))
+        self.txtXmax.setText(str(x_range[1]))
+        self.txtYmin.setText(str(y_range[0]))
+        self.txtYmax.setText(str(y_range[1]))
+
+    def xrange(self):
+        """
+        Return a tuple with line edit content of (xmin, xmax)
+        """
+        return (float(self.txtXmin.text()),
+                float(self.txtXmax.text()))
+
+    def yrange(self):
+        """
+        Return a tuple with line edit content of (ymin, ymax)
+        """
+        return (float(self.txtYmin.text()),
+                float(self.txtYmax.text()))
Index: src/sas/qtgui/UI/SetGraphRangeUI.ui
===================================================================
--- src/sas/qtgui/UI/SetGraphRangeUI.ui	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
+++ src/sas/qtgui/UI/SetGraphRangeUI.ui	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>setGraphRangeUI</class>
+ <widget class="QDialog" name="setGraphRangeUI">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>358</width>
+    <height>144</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Set Graph Range</string>
+  </property>
+  <property name="modal">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="0" column="0">
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>X min</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLineEdit" name="txtXmin"/>
+     </item>
+     <item row="0" column="2">
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>X max</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="3">
+      <widget class="QLineEdit" name="txtXmax"/>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="label_3">
+       <property name="text">
+        <string>Y min</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="QLineEdit" name="txtYmin"/>
+     </item>
+     <item row="1" column="2">
+      <widget class="QLabel" name="label_4">
+       <property name="text">
+        <string>Y max</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="3">
+      <widget class="QLineEdit" name="txtYmax"/>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="0">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>setGraphRangeUI</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>setGraphRangeUI</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
Index: src/sas/qtgui/UnitTesting/PlotterTest.py
===================================================================
--- src/sas/qtgui/UnitTesting/PlotterTest.py	(revision 9290b1a2e57458d51b13f1acd1798b999372c7d7)
+++ src/sas/qtgui/UnitTesting/PlotterTest.py	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
@@ -162,4 +162,11 @@
         pass
 
+    def testOnSetGraphRange(self):
+        """ Cheks if the graph can be resized for range """
+        pass
+
+    def testOnResetGraphRange(self):
+        """ Cheks if the graph can be reset after resizing for range """
+        pass
 
 if __name__ == "__main__":
Index: src/sas/qtgui/UnitTesting/SetGraphRangeTest.py
===================================================================
--- src/sas/qtgui/UnitTesting/SetGraphRangeTest.py	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
+++ src/sas/qtgui/UnitTesting/SetGraphRangeTest.py	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
@@ -0,0 +1,56 @@
+import sys
+import unittest
+
+from PyQt4 import QtGui
+
+# set up import paths
+import path_prepare
+
+# Local
+from SetGraphRange import SetGraphRange
+
+app = QtGui.QApplication(sys.argv)
+
+class SetGraphRangeTest(unittest.TestCase):
+    '''Test the SetGraphRange'''
+    def setUp(self):
+        '''Create the SetGraphRange'''
+
+        self.widget = SetGraphRange(None)
+
+    def tearDown(self):
+        '''Destroy the GUI'''
+        self.widget.close()
+        self.widget = None
+
+    def testDefaults(self):
+        '''Test the GUI in its default state'''
+        self.assertIsInstance(self.widget, QtGui.QDialog)
+        self.assertEqual(self.widget.windowTitle(), "Set Graph Range")
+        self.assertIsInstance(self.widget.txtXmin, QtGui.QLineEdit)
+        self.assertIsInstance(self.widget.txtXmin.validator(), QtGui.QDoubleValidator)
+        
+    def testGoodRanges(self):
+        '''Test the X range values set by caller''' 
+        self.assertEqual(self.widget.xrange(), (0.0, 0.0))
+        self.assertEqual(self.widget.yrange(), (0.0, 0.0))
+
+        new_widget = SetGraphRange(None, ("1.0", 2.0), (8.0, "-2"))
+        self.assertEqual(new_widget.xrange(), (1.0, 2.0))
+        self.assertEqual(new_widget.yrange(), (8.0, -2.0))
+
+
+    def testBadRanges(self):
+        '''Test the incorrect X range values set by caller'''
+        with self.assertRaises(ValueError):
+            new_widget = SetGraphRange(None, ("1.0", "aa"), (None, "@"))
+            self.assertEqual(new_widget.xrange(), (1.0, 0.0))
+            self.assertEqual(new_widget.yrange(), (0.0, 0.0))
+
+        with self.assertRaises(AssertionError):
+            new_widget = SetGraphRange(None, "I'm a tuple", None)
+            self.assertEqual(new_widget.xrange(), (1.0, 0.0))
+            self.assertEqual(new_widget.yrange(), (0.0, 0.0))
+
+if __name__ == "__main__":
+    unittest.main()
Index: src/sas/qtgui/run_tests.bat
===================================================================
--- src/sas/qtgui/run_tests.bat	(revision 9290b1a2e57458d51b13f1acd1798b999372c7d7)
+++ src/sas/qtgui/run_tests.bat	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
@@ -18,2 +18,3 @@
 python -m UnitTesting.WindowTitleTest
 python -m UnitTesting.AddTextTest
+python -m UnitTesting.SetGraphRangeTest
Index: src/sas/qtgui/run_tests.sh
===================================================================
--- src/sas/qtgui/run_tests.sh	(revision 9290b1a2e57458d51b13f1acd1798b999372c7d7)
+++ src/sas/qtgui/run_tests.sh	(revision d3ca36332a95a5caf23ee8f8223a9c9912826726)
@@ -17,2 +17,3 @@
 python -m UnitTesting.WindowTitleTest
 python -m UnitTesting.AddTextTest
+python -m UnitTesting.SetGraphRangeTest
