source: internals/2011/cmce/trunk/gui/gui_library/input.py @ 5005

Last change on this file since 5005 was 5005, checked in by goncalo.pinheira, 9 years ago

CMCE: added current version

File size: 2.9 KB
Line 
1import sys, os
2from PyQt4 import QtGui, QtCore
3from PyQt4.QtCore import QObject, QString, SIGNAL
4
5def baseDialog(parent, title, text, widget_f, buttons):
6    '''widget_code and button_code are both functions. widget_code() should return the main widget (i.e: a QListWidget for inputing a choice) and buttons_code() must return a tuple of buttons''' 
7    class TmpDialog(QtGui.QDialog):
8        def __init__(self, parent):
9            QtGui.QDialog.__init__(self)
10            self.resize(300, 300)
11            self.setWindowTitle(title)
12            self.returnValue=None
13
14            self.widget= widget_f()
15            label= QtGui.QLabel(text)
16
17            layout= QtGui.QVBoxLayout(self)
18            widgetNButtonLayout= QtGui.QHBoxLayout()
19            buttonLayout= QtGui.QVBoxLayout()
20
21            layout.addWidget(label)
22            layout.addLayout(widgetNButtonLayout)
23            widgetNButtonLayout.addWidget(self.widget)
24            widgetNButtonLayout.addLayout(buttonLayout)
25            globals()['dialog']= self
26            for button_text, event in buttons:
27                button= QtGui.QPushButton()
28                button.setText(button_text)
29                QObject.connect(button, QtCore.SIGNAL('clicked()'), event)
30                buttonLayout.addWidget(button)
31            buttonLayout.addStretch()
32
33        def saveReturn(self):
34            self.returnValue= self.widget.returnValue()
35
36    dialog = TmpDialog(parent)
37    dialog.exec_()
38    return dialog.returnValue
39
40
41def dynamic_button_event():
42    exec QObject.sender().event_code
43
44
45OK_CODE= lambda : (globals()['dialog'].saveReturn(), globals()['dialog'].done(0))
46CANCEL_CODE= lambda : globals()['dialog'].done(0)
47
48def choice(str_list, text="Select a option:", title="Select a option", buttons= (("OK",OK_CODE),), multi_choice=False, return_index=False):
49    #return QtGui.QInputDialog.getItem(None, title, text, str_list)._exec()
50    print str_list, text, title, multi_choice, return_index
51    def create_widget():
52        w= QtGui.QListWidget()
53        [w.addItem(s) for s in str_list]
54        if multi_choice:
55            w.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
56        def returnValue():
57            texts= [i.text() for i in w.selectedItems()]
58            if return_index:
59                return map(str_list.index, map(unicode, texts))
60            else:
61                return texts
62        w.returnValue= returnValue
63        return w
64    return baseDialog( None, title, text, create_widget, buttons)
65
66def force_choice(cant_cancel=True, return_at_least_one= True, *args, **kwargs):
67    '''repeats choice() until conditions are met'''
68    while True:
69        ret= choice(*args, **kwargs)
70        if ret is not None:
71            if len(ret)>0:
72                break
73            else:
74                if not return_at_least_one:
75                    break
76        else:
77            if not cant_cancel:
78                break
79    return ret
Note: See TracBrowser for help on using the repository browser.