root/trunk/chavier/dialogs.py

Revision 148, 6.9 kB (checked in by lgs, 3 years ago)

Update the copyright line and pep8ize the code

Line 
1# Copyright(c) 2007-2009 by Lorenzo Gil Sanchez <lorenzo.gil.sanchez@gmail.com>
2#
3# This file is part of Chavier.
4#
5# Chavier is free software: you can redistribute it and/or modify
6# it under the terms of the GNU Lesser General Public License as published by
7# the Free Software Foundation, either version 3 of the License, or
8# (at your option) any later version.
9#
10# Chavier is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13# GNU Lesser General Public License for more details.
14#
15# You should have received a copy of the GNU Lesser General Public License
16# along with Chavier.  If not, see <http://www.gnu.org/licenses/>.
17
18import random
19import webbrowser
20
21import pygtk
22pygtk.require('2.0')
23import gtk
24
25
26class TextInputDialog(gtk.Dialog):
27
28    def __init__(self, toplevel_window, suggested_name):
29        flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT
30        buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
31                   gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)
32        super(TextInputDialog, self).__init__(u'Enter a name for the dataset',
33                                              toplevel_window, flags, buttons)
34        self.set_default_size(300, -1)
35
36        hbox = gtk.HBox(spacing=6)
37        hbox.set_border_width(12)
38
39        label = gtk.Label(u'Name')
40        hbox.pack_start(label, False, False)
41
42        self.entry = gtk.Entry()
43        self.entry.set_text(suggested_name)
44        self.entry.set_activates_default(True)
45        hbox.pack_start(self.entry, True, True)
46
47        self.vbox.pack_start(hbox, False, False)
48
49        self.vbox.show_all()
50
51        self.set_default_response(gtk.RESPONSE_ACCEPT)
52
53    def get_name(self):
54        return self.entry.get_text()
55
56
57class PointDialog(gtk.Dialog):
58
59    def __init__(self, toplevel_window, initial_x, initial_y):
60        flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT
61        buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
62                   gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)
63        super(PointDialog, self).__init__(u'Enter the point values',
64                                          toplevel_window, flags, buttons)
65
66        initials = {u'x': str(initial_x), u'y': str(initial_y)}
67        self.entries = {}
68        for coordinate in (u'x', u'y'):
69            hbox = gtk.HBox(spacing=6)
70            hbox.set_border_width(12)
71
72            label = gtk.Label(coordinate)
73            hbox.pack_start(label, False, False)
74
75            entry = gtk.Entry()
76            entry.set_activates_default(True)
77            entry.set_text(initials[coordinate])
78            hbox.pack_start(entry, True, True)
79
80            self.entries[coordinate] = entry
81
82            self.vbox.pack_start(hbox, False, False)
83
84        self.vbox.show_all()
85
86        self.set_default_response(gtk.RESPONSE_ACCEPT)
87
88    def get_point(self):
89        return (float(self.entries[u'x'].get_text()),
90                float(self.entries[u'y'].get_text()))
91
92
93class OptionDialog(gtk.Dialog):
94
95    def __init__(self, toplevel_window, label, value, value_type):
96        flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT
97        buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
98                   gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)
99        super(OptionDialog, self).__init__(u'Enter the option value',
100                                           toplevel_window, flags, buttons)
101
102
103        hbox = gtk.HBox(spacing=6)
104        hbox.set_border_width(12)
105
106        label = gtk.Label(label)
107        hbox.pack_start(label, False, False)
108
109        self.entry = gtk.Entry()
110        self.entry.set_text(value or '')
111        self.entry.set_activates_default(True)
112        hbox.pack_start(self.entry, True, True)
113
114        self.vbox.pack_start(hbox, False, False)
115
116        self.vbox.show_all()
117
118        self.set_default_response(gtk.RESPONSE_ACCEPT)
119
120    def get_value(self):
121        return self.entry.get_text()
122
123
124class RandomGeneratorDialog(gtk.Dialog):
125
126    def __init__(self, toplevel_window):
127        flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT
128        buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
129                   gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)
130        super(RandomGeneratorDialog, self).__init__(u'Points generation',
131                                                    toplevel_window,
132                                                    flags, buttons)
133
134        self.size_group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
135
136        self.number = self._create_spin_button('Number of points to generate',
137                                               0, 1, 5, 1, 1000, 10)
138        self.min = self._create_spin_button('Minimum y value',
139                                            2, 0.5, 1, -1000, 1000, 0)
140        self.max = self._create_spin_button('Maximum y value',
141                                            2, 0.5, 1, 0, 1000, 10)
142
143        self.vbox.show_all()
144
145        self.set_default_response(gtk.RESPONSE_ACCEPT)
146
147    def _create_spin_button(self, label_text, digits, step, page,
148                            min_value, max_value, value):
149        hbox = gtk.HBox(spacing=6)
150        hbox.set_border_width(12)
151
152        label = gtk.Label(label_text)
153        label.set_alignment(1.0, 0.5)
154        self.size_group.add_widget(label)
155        hbox.pack_start(label, False, False)
156
157        spin_button = gtk.SpinButton(digits=digits)
158        spin_button.set_increments(step, page)
159        spin_button.set_range(min_value, max_value)
160        spin_button.set_value(value)
161        spin_button.set_activates_default(True)
162        hbox.pack_start(spin_button, True, True)
163
164        self.vbox.pack_start(hbox, False, False)
165
166        return spin_button
167
168    def generate_points(self):
169        n = self.number.get_value_as_int()
170        min_value = self.min.get_value()
171        max_value = self.max.get_value()
172        return [(x, random.uniform(min_value, max_value))
173                for x in range(n)]
174
175
176class AboutDialog(gtk.AboutDialog):
177
178    def __init__(self, toplevel_window):
179        super(AboutDialog, self).__init__()
180        self.set_transient_for(toplevel_window)
181
182        self.set_name('Chavier')
183        self.set_version('0.1')
184        self.set_comments('A Chart Viewer for the Pycha library')
185        self.set_copyright('Copyleft 2008 Lorenzo Gil Sanchez')
186        #self.set_license('LGPL')
187        author = 'Lorenzo Gil Sanchez <lorenzo.gil.sanchez@gmail.com>'
188        self.set_authors([author])
189        self.set_program_name('Chavier')
190        self.set_website('http://www.lorenzogil.com/projects/pycha')
191        self.set_website_label('Project website')
192
193
194def url_handler(dialog, link, data=None):
195    webbrowser.open(link)
196
197gtk.about_dialog_set_url_hook(url_handler)
198
199
200def warning(window, msg):
201    dialog = gtk.MessageDialog(window,
202                               gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
203                               gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, msg)
204    dialog.run()
205    dialog.destroy()
Note: See TracBrowser for help on using the browser.