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()