relational/relational_gui/creator.py

154 lines
4.8 KiB
Python

# -*- coding: utf-8 -*-
# Relational
# Copyright (C) 2008 Salvo "LtWorf" Tomaselli
#
# Relational 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 <http://www.gnu.org/licenses/>.
#
# author Salvo "LtWorf" Tomaselli <tiposchi@tiscali.it>
try:
from PyQt4 import QtCore, QtGui
except:
from PySide import QtCore, QtGui
import compatibility
from relational import relation
import rel_edit
class creatorForm(QtGui.QDialog):
def __init__(self,rel=None):
QtGui.QDialog.__init__(self)
self.setSizeGripEnabled(True)
self.result_relation=None
self.rel=rel
def setUi(self,ui):
self.ui=ui
self.table=self.ui.table
if self.rel==None:
self.setup_empty()
else:
self.setup_relation(self.rel)
def setup_relation(self,rel):
self.table.insertRow(0)
for i in rel.header.attributes:
item=QtGui.QTableWidgetItem()
item.setText(i)
self.table.insertColumn(self.table.columnCount())
self.table.setItem(0,self.table.columnCount()-1,item)
for i in rel.content:
self.table.insertRow(self.table.rowCount())
for j in range(len(i)):
item=QtGui.QTableWidgetItem()
item.setText(i[j])
self.table.setItem(self.table.rowCount()-1,j,item)
pass
def setup_empty(self):
self.table.insertColumn(0)
self.table.insertColumn(0)
self.table.insertRow(0)
self.table.insertRow(0)
i00=QtGui.QTableWidgetItem()
i01=QtGui.QTableWidgetItem()
i10=QtGui.QTableWidgetItem()
i11=QtGui.QTableWidgetItem()
i00.setText('Field name 1')
i01.setText('Field name 2')
i10.setText('Value 1')
i11.setText('Value 2')
self.table.setItem (0,0,i00)
self.table.setItem (0,1,i01)
self.table.setItem (1,0,i10)
self.table.setItem (1,1,i11)
def create_relation(self):
hlist=[]
for i in range(self.table.columnCount()):
hlist.append(compatibility.get_py_str(self.table.item(0,i).text()))
try:
header=relation.header(hlist)
except Exception, e:
QtGui.QMessageBox.information(None,QtGui.QApplication.translate("Form", "Error"),"%s\n%s" % (QtGui.QApplication.translate("Form", "Header error!"),e.__str__()) )
return None
r=relation.relation()
r.header=header
for i in range(1,self.table.rowCount()):
hlist=[]
for j in range(self.table.columnCount()):
try:
hlist.append(compatibility.get_py_str(self.table.item(i,j).text()))
except:
QtGui.QMessageBox.information(None,QtGui.QApplication.translate("Form", "Error"),QtGui.QApplication.translate("Form", "Unset value in %d,%d!"% (i+1,j+1)) )
return None
r.content.add(tuple(hlist))
return r
def accept(self):
self.result_relation=self.create_relation()
#Doesn't close the window in case of errors
if self.result_relation!=None:
QtGui.QDialog.accept(self)
pass
def reject(self):
self.result_relation=None
QtGui.QDialog.reject(self)
pass
def addColumn(self):
self.table.insertColumn(self.table.columnCount())
pass
def addRow(self):
self.table.insertRow(1)
pass
def deleteColumn(self):
if self.table.columnCount()>1:
self.table.removeColumn(self.table.currentColumn())
pass
def deleteRow(self):
if self.table.rowCount()>2:
self.table.removeRow(self.table.currentRow())
pass
def edit_relation(rel=None):
'''Opens the editor for the given relation and returns a _new_ relation
containing the new relation.
If the user cancels, it returns None'''
ui = rel_edit.Ui_Dialog()
Form = creatorForm(rel)
ui.setupUi(Form)
Form.setUi(ui)
Form.exec_()
return Form.result_relation
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
r=relation.relation("/home/salvo/dev/relational/trunk/samples/people.csv")
print edit_relation(r)