diff --git a/CHANGELOG b/CHANGELOG
index 53e7af3..9a1143f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -42,4 +42,5 @@
- Changed internal rename method. Now uses a dictionary
- Optimized saving of relations
- Can save relations from gui
-- Outer join methods simplified
\ No newline at end of file
+- Outer join methods simplified
+- Form to send a survey
\ No newline at end of file
diff --git a/maingui.py b/maingui.py
index 47a6e5e..8d0c906 100644
--- a/maingui.py
+++ b/maingui.py
@@ -22,11 +22,14 @@ import relation
import parser
import sys
import about
+import survey
import os
+import surveyForm
class Ui_Form(object):
def __init__(self):
self.About=None
+ self.Survey=None
self.relations={} #Dictionary for relations
def execute(self):
try:
@@ -101,6 +104,13 @@ class Ui_Form(object):
for i in self.lstRelations.selectedItems():
del self.relations[str(i.text().toUtf8())]
self.updateRelations()
+ def showSurvey(self):
+ if self.Survey==None:
+ self.Survey=surveyForm.surveyForm()
+ ui = survey.Ui_Form()
+ self.Survey.setUi(ui)
+ ui.setupUi(self.Survey)
+ self.Survey.show()
def showAbout(self):
if self.About==None:
self.About = QtGui.QDialog()
@@ -180,8 +190,11 @@ class Ui_Form(object):
self.verticalLayout_8 = QtGui.QVBoxLayout(self.groupBox_4)
self.verticalLayout_8.setObjectName("verticalLayout_8")
self.cmdAbout = QtGui.QPushButton(self.groupBox_4)
+ self.cmdSurvey = QtGui.QPushButton(self.groupBox_4)
self.cmdAbout.setObjectName("cmdAbout")
+ self.cmdSurvey.setObjectName("cmdSurvey")
self.verticalLayout_8.addWidget(self.cmdAbout)
+ self.verticalLayout_8.addWidget(self.cmdSurvey)
self.verticalLayout_4.addWidget(self.groupBox_4)
self.groupBox = QtGui.QGroupBox(Form)
self.groupBox.setObjectName("groupBox")
@@ -310,6 +323,7 @@ class Ui_Form(object):
self.retranslateUi(Form)
QtCore.QObject.connect(self.txtQuery,QtCore.SIGNAL("returnPressed()"),self.execute)
QtCore.QObject.connect(self.cmdAbout,QtCore.SIGNAL("clicked()"),self.showAbout)
+ QtCore.QObject.connect(self.cmdSurvey,QtCore.SIGNAL("clicked()"),self.showSurvey)
QtCore.QObject.connect(self.cmdProduct,QtCore.SIGNAL("clicked()"),self.addProduct)
QtCore.QObject.connect(self.cmdDifference,QtCore.SIGNAL("clicked()"),self.addDifference)
QtCore.QObject.connect(self.cmdUnion,QtCore.SIGNAL("clicked()"),self.addUnion)
@@ -344,11 +358,13 @@ class Ui_Form(object):
Form.setTabOrder(self.cmdOuterLeft,self.cmdProjection)
Form.setTabOrder(self.cmdProjection,self.cmdRename)
Form.setTabOrder(self.cmdRename,self.cmdAbout)
+ Form.setTabOrder(self.cmdAbout,self.cmdSurvey)
def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Relational", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_4.setTitle(QtGui.QApplication.translate("Form", "Menu", None, QtGui.QApplication.UnicodeUTF8))
self.cmdAbout.setText(QtGui.QApplication.translate("Form", "Docs", None, QtGui.QApplication.UnicodeUTF8))
+ self.cmdSurvey.setText(QtGui.QApplication.translate("Form", "Survey", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox.setTitle(QtGui.QApplication.translate("Form", "Operators", None, QtGui.QApplication.UnicodeUTF8))
self.cmdProduct.setToolTip(QtGui.QApplication.translate("Form", "Product operator", None, QtGui.QApplication.UnicodeUTF8))
self.cmdProduct.setText(QtGui.QApplication.translate("Form", "*", None, QtGui.QApplication.UnicodeUTF8))
@@ -387,8 +403,7 @@ class Ui_Form(object):
self.lstAttributes.setToolTip(QtGui.QApplication.translate("Form", "Shows the attributes of the current relation", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Form", "Query", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("Form", "=", None, QtGui.QApplication.UnicodeUTF8))
- self.cmdExecute.setText(QtGui.QApplication.translate("Form", "Execute", None, QtGui.QApplication.UnicodeUTF8))
-
+ self.cmdExecute.setText(QtGui.QApplication.translate("Form", "Execute", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
import sys
diff --git a/survey.py b/survey.py
new file mode 100644
index 0000000..68fe3b4
--- /dev/null
+++ b/survey.py
@@ -0,0 +1,114 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'survey.ui'
+#
+# Created: Tue Nov 11 11:46:10 2008
+# by: PyQt4 UI code generator 4.4.2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_Form(object):
+ def setupUi(self, Form):
+ Form.setObjectName("Form")
+ Form.resize(400,322)
+ self.verticalLayout = QtGui.QVBoxLayout(Form)
+ self.verticalLayout.setObjectName("verticalLayout")
+ self.formLayout = QtGui.QGridLayout()
+ self.formLayout.setObjectName("formLayout")
+ self.txtSystem = QtGui.QLineEdit(Form)
+ self.txtSystem.setObjectName("txtSystem")
+ self.formLayout.addWidget(self.txtSystem,0,1,1,1)
+ self.label = QtGui.QLabel(Form)
+ self.label.setObjectName("label")
+ self.formLayout.addWidget(self.label,1,0,1,1)
+ self.txtCountry = QtGui.QLineEdit(Form)
+ self.txtCountry.setObjectName("txtCountry")
+ self.formLayout.addWidget(self.txtCountry,1,1,1,1)
+ self.label_2 = QtGui.QLabel(Form)
+ self.label_2.setObjectName("label_2")
+ self.formLayout.addWidget(self.label_2,2,0,1,1)
+ self.txtSchool = QtGui.QLineEdit(Form)
+ self.txtSchool.setObjectName("txtSchool")
+ self.formLayout.addWidget(self.txtSchool,2,1,1,1)
+ self.label_3 = QtGui.QLabel(Form)
+ self.label_3.setObjectName("label_3")
+ self.formLayout.addWidget(self.label_3,3,0,1,1)
+ self.txtAge = QtGui.QLineEdit(Form)
+ self.txtAge.setObjectName("txtAge")
+ self.formLayout.addWidget(self.txtAge,3,1,1,1)
+ self.label_4 = QtGui.QLabel(Form)
+ self.label_4.setObjectName("label_4")
+ self.formLayout.addWidget(self.label_4,4,0,1,1)
+ self.txtFind = QtGui.QLineEdit(Form)
+ self.txtFind.setObjectName("txtFind")
+ self.formLayout.addWidget(self.txtFind,4,1,1,1)
+ self.label_5 = QtGui.QLabel(Form)
+ self.label_5.setObjectName("label_5")
+ self.formLayout.addWidget(self.label_5,0,0,1,1)
+ self.label_6 = QtGui.QLabel(Form)
+ self.label_6.setObjectName("label_6")
+ self.formLayout.addWidget(self.label_6,5,0,1,1)
+ self.txtComments = QtGui.QTextEdit(Form)
+ self.txtComments.setTabChangesFocus(True)
+ self.txtComments.setObjectName("txtComments")
+ self.formLayout.addWidget(self.txtComments,5,1,1,1)
+ self.verticalLayout.addLayout(self.formLayout)
+ self.horizontalLayout = QtGui.QHBoxLayout()
+ self.horizontalLayout.setObjectName("horizontalLayout")
+ spacerItem = QtGui.QSpacerItem(40,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
+ self.horizontalLayout.addItem(spacerItem)
+ self.cmdCancel = QtGui.QPushButton(Form)
+ self.cmdCancel.setObjectName("cmdCancel")
+ self.horizontalLayout.addWidget(self.cmdCancel)
+ self.cmdClear = QtGui.QPushButton(Form)
+ self.cmdClear.setObjectName("cmdClear")
+ self.horizontalLayout.addWidget(self.cmdClear)
+ self.cmdSend = QtGui.QPushButton(Form)
+ self.cmdSend.setObjectName("cmdSend")
+ self.horizontalLayout.addWidget(self.cmdSend)
+ self.verticalLayout.addLayout(self.horizontalLayout)
+ self.label.setBuddy(self.txtCountry)
+ self.label_2.setBuddy(self.txtSchool)
+ self.label_3.setBuddy(self.txtAge)
+ self.label_4.setBuddy(self.txtFind)
+ self.label_5.setBuddy(self.txtSystem)
+ self.label_6.setBuddy(self.txtComments)
+
+ self.retranslateUi(Form)
+ QtCore.QObject.connect(self.cmdCancel,QtCore.SIGNAL("clicked()"),Form.close)
+ QtCore.QObject.connect(self.cmdClear,QtCore.SIGNAL("clicked()"),self.txtComments.clear)
+ QtCore.QObject.connect(self.cmdClear,QtCore.SIGNAL("clicked()"),self.txtFind.clear)
+ QtCore.QObject.connect(self.cmdClear,QtCore.SIGNAL("clicked()"),self.txtAge.clear)
+ QtCore.QObject.connect(self.cmdClear,QtCore.SIGNAL("clicked()"),self.txtSchool.clear)
+ QtCore.QObject.connect(self.cmdClear,QtCore.SIGNAL("clicked()"),self.txtCountry.clear)
+ QtCore.QObject.connect(self.cmdClear,QtCore.SIGNAL("clicked()"),self.txtSystem.clear)
+ QtCore.QObject.connect(self.txtSystem,QtCore.SIGNAL("returnPressed()"),self.txtCountry.setFocus)
+ QtCore.QObject.connect(self.txtCountry,QtCore.SIGNAL("returnPressed()"),self.txtSchool.setFocus)
+ QtCore.QObject.connect(self.txtSchool,QtCore.SIGNAL("returnPressed()"),self.txtAge.setFocus)
+ QtCore.QObject.connect(self.txtAge,QtCore.SIGNAL("returnPressed()"),self.txtFind.setFocus)
+ QtCore.QObject.connect(self.txtFind,QtCore.SIGNAL("returnPressed()"),self.txtComments.setFocus)
+ QtCore.QObject.connect(self.cmdSend,QtCore.SIGNAL("clicked()"),Form.send)
+ QtCore.QMetaObject.connectSlotsByName(Form)
+ Form.setTabOrder(self.txtSystem,self.txtCountry)
+ Form.setTabOrder(self.txtCountry,self.txtSchool)
+ Form.setTabOrder(self.txtSchool,self.txtAge)
+ Form.setTabOrder(self.txtAge,self.txtFind)
+ Form.setTabOrder(self.txtFind,self.txtComments)
+ Form.setTabOrder(self.txtComments,self.cmdSend)
+ Form.setTabOrder(self.cmdSend,self.cmdClear)
+ Form.setTabOrder(self.cmdClear,self.cmdCancel)
+
+ def retranslateUi(self, Form):
+ Form.setWindowTitle(QtGui.QApplication.translate("Form", "Survey", None, QtGui.QApplication.UnicodeUTF8))
+ self.label.setText(QtGui.QApplication.translate("Form", "Country", None, QtGui.QApplication.UnicodeUTF8))
+ self.label_2.setText(QtGui.QApplication.translate("Form", "School", None, QtGui.QApplication.UnicodeUTF8))
+ self.label_3.setText(QtGui.QApplication.translate("Form", "Age", None, QtGui.QApplication.UnicodeUTF8))
+ self.label_4.setText(QtGui.QApplication.translate("Form", "How did you find relational", None, QtGui.QApplication.UnicodeUTF8))
+ self.label_5.setText(QtGui.QApplication.translate("Form", "System", None, QtGui.QApplication.UnicodeUTF8))
+ self.label_6.setText(QtGui.QApplication.translate("Form", "Comments", None, QtGui.QApplication.UnicodeUTF8))
+ self.cmdCancel.setText(QtGui.QApplication.translate("Form", "Cancel", None, QtGui.QApplication.UnicodeUTF8))
+ self.cmdClear.setText(QtGui.QApplication.translate("Form", "Clear", None, QtGui.QApplication.UnicodeUTF8))
+ self.cmdSend.setText(QtGui.QApplication.translate("Form", "Send", None, QtGui.QApplication.UnicodeUTF8))
+
diff --git a/survey.ui b/survey.ui
new file mode 100644
index 0000000..5911f2e
--- /dev/null
+++ b/survey.ui
@@ -0,0 +1,388 @@
+
+ Form
+
+
+
+ 0
+ 0
+ 400
+ 322
+
+
+
+ Survey
+
+
+
+
+
+ -
+
+
-
+
+
+ -
+
+
+
+
+
+ Country
+
+
+ txtCountry
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+ School
+
+
+ txtSchool
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+ Age
+
+
+ txtAge
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+ How did you find relational
+
+
+ txtFind
+
+
+
+ -
+
+
+ -
+
+
+
+
+
+ System
+
+
+ txtSystem
+
+
+
+ -
+
+
+ Comments
+
+
+ txtComments
+
+
+
+ -
+
+
+ true
+
+
+
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Cancel
+
+
+
+ -
+
+
+ Clear
+
+
+
+ -
+
+
+ Send
+
+
+ true
+
+
+
+
+
+
+
+
+ txtSystem
+ txtCountry
+ txtSchool
+ txtAge
+ txtFind
+ txtComments
+ cmdSend
+ cmdClear
+ cmdCancel
+
+
+
+
+ cmdCancel
+ clicked()
+ Form
+ close()
+
+
+ 228
+ 294
+
+
+ 180
+ 319
+
+
+
+
+ cmdClear
+ clicked()
+ txtComments
+ clear()
+
+
+ 288
+ 298
+
+
+ 291
+ 248
+
+
+
+
+ cmdClear
+ clicked()
+ txtFind
+ clear()
+
+
+ 270
+ 294
+
+
+ 284
+ 153
+
+
+
+
+ cmdClear
+ clicked()
+ txtAge
+ clear()
+
+
+ 269
+ 299
+
+
+ 257
+ 123
+
+
+
+
+ cmdClear
+ clicked()
+ txtSchool
+ clear()
+
+
+ 310
+ 299
+
+
+ 317
+ 87
+
+
+
+
+ cmdClear
+ clicked()
+ txtCountry
+ clear()
+
+
+ 298
+ 303
+
+
+ 326
+ 47
+
+
+
+
+ cmdClear
+ clicked()
+ txtSystem
+ clear()
+
+
+ 287
+ 303
+
+
+ 302
+ 18
+
+
+
+
+ txtSystem
+ returnPressed()
+ txtCountry
+ setFocus()
+
+
+ 213
+ 22
+
+
+ 224
+ 52
+
+
+
+
+ txtCountry
+ returnPressed()
+ txtSchool
+ setFocus()
+
+
+ 268
+ 54
+
+
+ 276
+ 89
+
+
+
+
+ txtSchool
+ returnPressed()
+ txtAge
+ setFocus()
+
+
+ 355
+ 85
+
+
+ 358
+ 118
+
+
+
+
+ txtAge
+ returnPressed()
+ txtFind
+ setFocus()
+
+
+ 375
+ 123
+
+
+ 375
+ 156
+
+
+
+
+ txtFind
+ returnPressed()
+ txtComments
+ setFocus()
+
+
+ 332
+ 154
+
+
+ 335
+ 200
+
+
+
+
+ cmdSend
+ clicked()
+ Form
+ send()
+
+
+ 381
+ 309
+
+
+ 396
+ 320
+
+
+
+
+
+ send()
+
+
diff --git a/surveyForm.py b/surveyForm.py
new file mode 100644
index 0000000..11bd781
--- /dev/null
+++ b/surveyForm.py
@@ -0,0 +1,56 @@
+# Relational
+# Copyright (C) 2008 Salvo "LtWorf" Tomaselli
+#
+# Relation is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+# author Salvo "LtWorf" Tomaselli
+from PyQt4 import QtCore, QtGui
+
+import httplib
+import urllib
+
+
+class surveyForm (QtGui.QWidget):
+ '''This class is the form used for the survey, needed to intercept the events'''
+ def setUi(self,ui):
+ self.ui=ui
+ def send(self):
+ #Creates the string
+ post="Relational algebra\n"
+ post+="system:" + str(self.ui.txtSystem.text().toUtf8())+ "\n"
+ post+="country:" + str(self.ui.txtCountry.text().toUtf8())+ "\n"
+ post+="school:" + str(self.ui.txtSchool.text().toUtf8())+ "\n"
+ post+="age:" + str(self.ui.txtAge.text().toUtf8())+ "\n"
+ post+="find:" + str(self.ui.txtFind.text().toUtf8())+ "\n"
+ post+="comments:" + str(self.ui.txtComments.toPlainText().toUtf8())
+
+ self.ui.txtSystem.clear()
+ self.ui.txtCountry.clear()
+ self.ui.txtSchool.clear()
+ self.ui.txtAge.clear()
+ self.ui.txtFind.clear()
+ self.ui.txtComments.clear()
+
+ #sends the string
+ params = urllib.urlencode({'survey':post})
+ headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
+ connection = httplib.HTTPConnection('galileo.dmi.unict.it')
+ connection.request("POST","/~ltworf/survey.php",params,headers)
+ response=connection.getresponse()
+ if response.status!=200:
+ QtGui.QMessageBox.information(None,QtGui.QApplication.translate("Form", "Error"),QtGui.QApplication.translate("Form", "Unable to send the data!") )
+ else:
+ QtGui.QMessageBox.information(None,QtGui.QApplication.translate("Form", "Thanks"),QtGui.QApplication.translate("Form", "Thanks for sending!") )
+
+ self.hide()