Skip to content

Commit

Permalink
minor changes
Browse files Browse the repository at this point in the history
  • Loading branch information
tedlaz committed Jun 18, 2018
1 parent a97f0a8 commit fcf3de6
Show file tree
Hide file tree
Showing 8 changed files with 145 additions and 12 deletions.
4 changes: 4 additions & 0 deletions sofos/models/field.py
@@ -1,4 +1,5 @@
"""Abstract class Field"""
from .. import qt


class Field():
Expand All @@ -18,6 +19,9 @@ def __init__(self, label='', null=False, unique=False, default=None,
self.max_length = 0
self.validators = []

def qwl(self, parent):
return qt.widget_selector.wselector(self, parent)

@property
def is_foreign_key(self):
return self.__class__.__name__ == 'ForeignKey'
Expand Down
2 changes: 1 addition & 1 deletion sofos/models/weekdaysfield.py
Expand Up @@ -12,7 +12,7 @@ def __init__(self, label, max_length=30, null=False, unique=False,
self.max_length = max_length

def validate(self, values):
result = len(eval(values)) == 7
result = len(eval(values.replace('!', "'"))) == 7
if result:
return True, 'ok It is array'
return False, 'Error, it is not an array'
88 changes: 88 additions & 0 deletions sofos/qt/abstract_form.py
@@ -0,0 +1,88 @@
import json
import PyQt5.QtWidgets as Qw
import PyQt5.QtCore as Qc
from sofos.qt import widget_selector as ws


class AbstractForm(Qw.QDialog):
def __init__(self, model, idv=None, parent=None):
super().__init__(parent)
self.setAttribute(Qc.Qt.WA_DeleteOnClose)
main_layout = Qw.QVBoxLayout(self)
self.fld_layout = Qw.QFormLayout()
main_layout.addLayout(self.fld_layout)
self.button_layout = Qw.QHBoxLayout()
main_layout.addLayout(self.button_layout)
self.add_buttons()
self.model = model
self.idv = idv or ''
self.widgets = {}
self.create_gui()

def add_buttons(self):
self.bcancel = Qw.QPushButton(u'Cancel', self)
self.bsave = Qw.QPushButton(u'Save', self)
# Make them loose focus
self.bcancel.setFocusPolicy(Qc.Qt.NoFocus)
self.bsave.setFocusPolicy(Qc.Qt.NoFocus)
# Add them to buttonlayout
self.button_layout.addWidget(self.bcancel)
self.button_layout.addWidget(self.bsave)
# Make connections
self.bcancel.clicked.connect(self.close)
self.bsave.clicked.connect(self.save)

def create_gui(self):
raise NotImplementedError

def set_data(self):
pass

def add_widget(self, fld_name, title, widget='str'):
self.widgets[fld_name] = ws.widget_by_name(widget, self)
no = len(self.widgets)
self.fld_layout.insertRow(no, Qw.QLabel(title), self.widgets[fld_name])

def get_data(self, typ=None):
data = {'id': self.idv}
for fld in self.widgets:
data[fld] = self.widgets[fld].get()
fdi = {'table': self.model, 'data': data}
if typ == 'json':
return json.dumps(fdi, ensure_ascii=False)
return fdi

def close(self):
self.accept()

def save(self):
print(self.get_data())


class Test(AbstractForm):
def __init__(self):
super().__init__('tbl1', None, None)
self.setWindowTitle('This is a test')

def create_gui(self):
self.add_widget('malakia', 'Μαλακία')
self.add_widget('dokimi', 'Πρόγραμμα', 'week_days')
self.add_widget('dat', 'Δοκιμή', 'date_or_empty')
self.add_widget('rrt', 'sfdsf', 'date')
dff = {'table-master': 'erg',
'table-detail': 'ergd',
'key': 'erg',
'delete-master-id': 13,
'save-master': {'id': '', 'epo': 'Lazaros'},
'save-detail': [{'id': '', 'r1': 'vl1'},
{'id': '', 'r1': 'vl2'}],
'delete-detail-ids': [12, 15]
}


if __name__ == '__main__':
import sys
app = Qw.QApplication(sys.argv)
mainWin = Test()
mainWin.show()
sys.exit(app.exec_())
4 changes: 2 additions & 2 deletions sofos/qt/fautoform.py
Expand Up @@ -54,7 +54,8 @@ def _create_fields(self):
self.widgets['id'] = TIntegerKey(parent=self)
self.widgets['id'].setVisible(False)
for i, fld in enumerate(self.model.field_names()):
self.widgets[fld] = wselector(self.model.field_object(fld), self)
# self.widgets[fld] = wselector(self.model.field_object(fld), self)
self.widgets[fld] = self.model.field_object(fld).qwl(self)
self.fld_layout.insertRow(
i, Qw.QLabel(lbs[fld]), self.widgets[fld])

Expand All @@ -76,7 +77,6 @@ def get_data(self):
def lock(self):
for widget in self.widgets.values():
widget.setEnabled(False)

self.bsave.setText('Edit')
self.locked = True

Expand Down
15 changes: 11 additions & 4 deletions sofos/qt/fautoformtable.py
Expand Up @@ -10,15 +10,22 @@ class FieldsToView(Qw.QDialog):
def __init__(self, fldList, parent=None):
super().__init__(parent)
self.setWindowTitle('Select Visible Fields')
self.layout = Qw.QVBoxLayout(self)
layout = Qw.QVBoxLayout(self)
scroll = Qw.QScrollArea()
scroll.setWidgetResizable(True)
layout.addWidget(scroll)
scont = Qw.QWidget()
vlay = Qw.QVBoxLayout(scont)
vlay.setAlignment(Qc.Qt.AlignTop)
scroll.setWidget(scont)
self.fields = fldList
self.fld_widgets = {}
for elm in fldList:
self.fld_widgets[elm[0]] = Qw.QCheckBox(elm[1])
self.fld_widgets[elm[0]].setChecked(elm[2])
self.layout.addWidget(self.fld_widgets[elm[0]])
vlay.addWidget(self.fld_widgets[elm[0]])
btnlay = Qw.QHBoxLayout()
self.layout.addLayout(btnlay)
layout.addLayout(btnlay)
btn = Qw.QPushButton('ok')
bde = Qw.QPushButton('Set as Default')
btnlay.addWidget(bde)
Expand Down Expand Up @@ -213,7 +220,7 @@ def _strItem(self, strv):
return item

def _weekdayItem(self, strv):
weekdays_list = eval(strv)
weekdays_list = eval(strv.replace('!', "'"))
items = []
for i, wday in enumerate(weekdays_list):
if wday != '':
Expand Down
4 changes: 2 additions & 2 deletions sofos/qt/tweekdays.py
Expand Up @@ -214,7 +214,7 @@ def paintEvent(self, event=None):

def get(self, strVal=True):
if strVal:
return str(self.grid).replace("'", '"')
return str(self.grid).replace("'", '"').replace('"', '!')
else:
return self.grid

Expand All @@ -224,7 +224,7 @@ def set(self, darray=None):
if darray is None or darray == '':
darr = '["", "", "", "", "", "", ""]'
else:
darr = str(darray)
darr = str(darray).replace('!', "'")
tmparr = eval(darr)
if len(tmparr) == 7:
self.grid = tmparr
Expand Down
34 changes: 34 additions & 0 deletions sofos/qt/widget_selector.py
Expand Up @@ -48,3 +48,37 @@ def wselector(field, parent):
return TTextLine(parent=parent)
else:
return TTextLine(parent=parent)


def widget_by_name(fld_name, parent, ftable=None):
"""Factory to create widgets
:param field: object field
:param parent: parent object
:return: A customized qt widget
"""
if fld_name == 'int':
return TInteger(parent=parent)
elif fld_name == 'text_button':
return TTextButton(None, ftable, parent)
elif fld_name == 'combo':
return TComboDB(None, ftable, parent)
elif fld_name == 'check_box':
return TCheckbox(parent=parent)
elif fld_name == 'date':
return TDate(parent=parent)
elif fld_name == 'date_or_empty':
return TDateEmpty(parent=parent)
elif fld_name == 'num':
return TNumeric(parent=parent)
elif fld_name == 'text_num':
return TTextlineNum(parent=parent)
elif fld_name == 'text':
return TText(parent=parent)
elif fld_name == 'week_days':
return TWeekdays(parent=parent)
elif fld_name == 'str':
return TTextLine(parent=parent)
else:
return TTextLine(parent=parent)
6 changes: 3 additions & 3 deletions sofos/tests/test_qt.py
Expand Up @@ -115,14 +115,14 @@ def test_TYesNoCombo_01(self):

def test_TWeekdays_01(self):
twd = qt.TWeekdays(None)
self.assertEqual(twd.get(), '["", "", "", "", "", "", ""]')
self.assertEqual(twd.get(), '[!!, !!, !!, !!, !!, !!, !!]')
# twd = qt.TWeekdays()
# self.assertEqual(twd.get(), '[1, 1, 1, 1, 1, 0, 0]')
# self.assertEqual(twd.get(False), [1, 1, 1, 1, 1, 0, 0])
twd.set([1, 2])
self.assertEqual(twd.get(), '["", "", "", "", "", "", ""]')
self.assertEqual(twd.get(), '[!!, !!, !!, !!, !!, !!, !!]')
twd.set5days()
self.assertEqual(twd.get(), '["08:00-16:00", "08:00-16:00", "08:00-16:00", "08:00-16:00", "08:00-16:00", "", ""]')
self.assertEqual(twd.get(), '[!08:00-16:00!, !08:00-16:00!, !08:00-16:00!, !08:00-16:00!, !08:00-16:00!, !!, !!]')
QTest.mouseClick(twd, Qc.Qt.RightButton)
# QTest.mouseClick(twd, Qc.Qt.LeftButton)

Expand Down

0 comments on commit fcf3de6

Please sign in to comment.