--- a/maketest/abxmaketest.py
+++ b/maketest/abxmaketest.py
@@ -3,10 +3,11 @@
 
 import sys
 from PyQt5.QtWidgets import *
+from PyQt5.QtGui import *
 
 from maketestgui import Ui_MainWindow
 import maketestutil
-from maketestutil import debug
+from maketestutil import debug neutstring
 import selecttrack
 
 class ABXMakeTest(QMainWindow):
@@ -14,12 +15,55 @@
         QMainWindow.__init__(self, parent)
         self.ui = Ui_MainWindow()
         self.ui.setupUi(self)
+        self.ui.actionSave.triggered.connect(self.onSave)
+        self.ui.actionSaveAs.triggered.connect(self.onSaveAs)
+        self.ui.actionQuit.triggered.connect(self.onExit)
+        qsrctq = QShortcut("Ctrl+Q", self)
+        qsrctq.activated.connect(self.onExit)
+        qsrcts = QShortcut("Ctrl+S", self)
+        qsrcts.activated.connect(self.onSave)
+        self.outfile = None
         self.onNoTrackSelect()
+        self.ui.lineACMB.insertItem(0, "")
+        self.ui.lineACMB.insertItem(1, "A")
+        self.ui.lineACMB.insertItem(2, "B")
+        self.ui.spkACMB.insertItem(0, "")
+        self.ui.spkACMB.insertItem(1, "A")
+        self.ui.spkACMB.insertItem(2, "B")
         self.ui.urlAPB.clicked.connect(self.urlAPBClicked)
         self.renderers = maketestutil.listRenderers()
         self.ui.rdrACMB.insertItem(0, "")
         for rdr in self.renderers:
             self.ui.rdrACMB.insertItem(self.ui.rdrACMB.count(), rdr[1] + " | " + rdr[0])
+
+    def onSave(self):
+        if not self.outfile:
+            self.onSaveAs()
+        debug("outfile: %s"%self.outfile)
+        f = open(self.outfile, "wb")
+        f.write("description = %s\n" % neutstring(self.ui.descriptionTE.toPlainText()))
+        f.write("renderer = %s\n" % self.ui.rdrACMB.currentText())
+        f.write("url = %s\n" % self.ui.urlALE.text())
+        f.write("meta = %s\n" % neutstring(self.ui.metaATE.toPlainText()))
+        secs = self.ui.seekASB.value()
+        if secs:
+            f.write("seek = %d\n" % secs)
+        secs = self.ui.durASB.value()
+        if secs:
+            f.write("dursecs = %d\n" % secs)
+        v = self.ui.lineACMB.currentText()
+        if v:
+            f.write("line = %s\n" % v)
+        v = self.ui.spkACMB.currentText()
+        if v:
+            f.write("spk = %s\n" % v)
+        f.write("\n[test]\n")
+        f.close()
+        
+    def onSaveAs(self):
+        self.outfile,filt = QFileDialog.getSaveFileName(self, 'Save File', directory = '')
+        if self.outfile:
+            self.onSave()
     def urlAPBClicked(self):
         self.choosingTrackA = True
         self.choosingTrackB = False