1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2010-2013 CEA/DEN, EDF R&D, OPEN CASCADE
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 __date__ ="$31 mars 2010 17:09:53$"
24 from mytestdialog_ui import Ui_MyTestDialog
25 from genericdialog import GenericDialog
27 class MyTestDialog(GenericDialog):
29 This class is to illustrate the usage of the GenericDialog to implement
30 the dialog windows of the application with a common design template provided
31 by the generic class GenericDialog.
33 def __init__(self, parent=None, name="MyTestDialog"):
34 GenericDialog.__init__(self, parent, name)
35 # Set up the user interface from Designer.
36 self.ui = Ui_MyTestDialog()
37 # BE CAREFULL HERE, the ui form is NOT put in the global dialog (already
38 # containing some generic widgets) but in the center panel created in the
39 # GenericDialog as a void container for the form. The MyTestDialog form
40 # is supposed here to create only the widgets to be placed in the center
42 self.ui.setupUi(self.getPanel())
45 # We implement here the interface of the MVC pattern
47 def setData(self, name):
49 This function implements the mapping from the data model to the widgets
51 self.ui.txtName.setText(name)
55 This function implements the control to be done on the values contained
56 in the widgets when trying to validate the dialog window (click OK first
59 if ( self.ui.txtName.text().trimmed() == "" ):
60 self.checkDataMessage = "The name can't be void"
66 This function implements the mapping from the widgets to the data model
68 name = str(self.ui.txtName.text().trimmed().toUtf8())
69 # _MEM_: note here that (i) the utf8 format is used and (ii) we must not
70 # forget to convert to a standard python string (instead of a QString).
74 from PyQt4.QtCore import SIGNAL
75 class MyTestDialogWithSignals(MyTestDialog):
77 This class is to illustrate the usage of the GenericDialog in the
78 case where the dialog windows is not modal. In such a case, the
79 controller must be warn of close events using Qt signals.
81 def __init__(self, parent=None, name="MyTestDialogWithSignals"):
82 MyTestDialog.__init__(self, parent, name)
86 This function is the slot connected to the the OK button
87 (click event of the OK button).
89 # The dialog is raised in a non modal mode (for example, to
90 # get interactivity with the parents windows. Then we have to
91 # emit a signal to warn the parent observer that the dialog
92 # has been validated so that it can process the event
93 MyTestDialog.accept(self)
95 self.emit(SIGNAL('inputValidated()'))
100 # ==============================================================================
102 # ==============================================================================
105 def TEST_MyTestDialog_modal():
107 from PyQt4.QtCore import QObject, SIGNAL, SLOT
108 from PyQt4.QtGui import QApplication
109 app = QApplication(sys.argv)
110 QObject.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
113 dlg.setData("A default name")
117 print "The name has been modified to",name
120 class DialogListener:
121 def onProcessEvent(self):
122 print "onProcessEvent(): OK has been pressed"
127 def TEST_MyTestDialog_non_modal():
129 from PyQt4.QtCore import QObject, SIGNAL, SLOT
130 from PyQt4.QtGui import QApplication
131 app = QApplication(sys.argv)
132 QObject.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
134 dlg=MyTestDialogWithSignals()
135 # This dialog window will emit a inputValidated() signal when the
136 # OK button is pressed and the data are validated. Then, we
137 # connect this signal to a local slot so that the event can be
139 dlgListener = DialogListener()
140 app.connect(dlg, SIGNAL('inputValidated()'), dlgListener.onProcessEvent)
141 # This connect instruction means that the signal inputValidated()
142 # emited by the dlg Qt object will raise a call to the slot
143 # dlgListener.onProcessEvent
145 dlg.setData("A default name")
150 if __name__ == "__main__":
151 #TEST_MyTestDialog_modal()
152 TEST_MyTestDialog_non_modal()