1
+ import os
1
2
import gtk
2
3
3
4
4
5
# Create a generic interface for displaying pages of settings
5
6
6
7
class Settings (object ):
7
8
8
- def __init__ (self ,page_classes ):
9
+ def __init__ (self ,parent = None , page_classes = [] ):
9
10
self .pages = {}
11
+ self .dialog_open = False
12
+ self .parent = parent
10
13
for c in page_classes :
11
14
self .add_settings_interface (c )
12
15
13
16
# This function can be called to add a interface
14
17
# Each one of these will display as a seperate page in the settings window
15
18
# You can not add a class more than once!
16
- # Classes must have unique names ! (This might change later...)
19
+ # Classes must have unique Class.name attributes ! (This might change later...)
17
20
def add_settings_interface (self ,setting_class ):
18
21
if setting_class .name in self .pages :
19
22
return False
20
23
self .pages [setting_class .name ] = setting_class ()
21
24
return True
22
25
23
26
# A simple interface for accessing values in the settings interface
24
- def get_value (self ,settings_class ,value_name )
27
+ def get_value (self ,settings_class ,value_name ):
25
28
return self .pages [settings_class .name ].get_value (value_name )
26
29
27
30
# goto_page should be the CLASS which you wish to go to!
28
- def create_dialog (self ,goto_page = None ):
29
- builder = gtk .Builder ()
30
- builder .add_from_file ('settings_interface.glade' )
31
- builder .connect_signals (self )
32
-
33
- self .notebook = builder .get_object ('notebook' )
34
-
35
- #sorted(a.items(),key=lambda x: x[1])
36
- set_page = None
37
- for name , c in sorted (self .pages .items ()):
38
- page = c .create_dialog (self .notebook )
31
+ def create_dialog (self ,goto_page = None ):
32
+ if not self .dialog_open :
33
+ builder = gtk .Builder ()
34
+ builder .add_from_file (os .path .join (os .path .dirname (os .path .realpath (__file__ )),'settings_interface.glade' ))
35
+ builder .connect_signals (self )
39
36
40
- if goto_page and isinstance (c ,goto_page ):
41
- # this is the page we want to go to!
42
- set_page = page
43
-
44
- # We do this here in case one of the settings pages specifically inserts itself in an out of order place (eg first)
45
- # We hope that everything will be in alphabetical order, but maybe not!
46
- if set_page :
47
- self .notebook .set_current_page (self .notebook .page_num (set_page ))
48
-
49
- self .window .show ()
37
+ self .notebook = builder .get_object ('notebook' )
38
+ self .window = builder .get_object ('window' )
39
+
40
+ #sorted(a.items(),key=lambda x: x[1])
41
+ set_page = None
42
+ for name , c in sorted (self .pages .items ()):
43
+ page = c .create_dialog (self .notebook )
44
+
45
+ if goto_page and isinstance (c ,goto_page ):
46
+ # this is the page we want to go to!
47
+ set_page = page
50
48
49
+ # We do this here in case one of the settings pages specifically inserts itself in an out of order place (eg first)
50
+ # We hope that everything will be in alphabetical order, but maybe not!
51
+ if set_page :
52
+ self .notebook .set_current_page (self .notebook .page_num (set_page ))
53
+
54
+ if self .parent :
55
+ self .window .set_transient_for (self .parent )
56
+
57
+ self .window .show ()
58
+ self .dialog_open = True
59
+ else :
60
+ self .window .present ()
51
61
52
62
def on_save (self ,widget ):
53
63
# Save the settings
54
- for page in self .pages :
64
+ for page in self .pages . values () :
55
65
page .save ()
66
+ self .close ()
56
67
57
68
def on_cancel (self ,widget ):
58
69
self .close ()
59
70
60
- def close (self ):
61
- # Close the setting classes
62
- for page in self .pages :
63
- page .close ()
64
- self .window .destroy ()
71
+ def close (self ,* args ,** kwargs ):
72
+ if self .dialog_open :
73
+ # Close the setting classes
74
+ for page in self .pages .values ():
75
+ page .close ()
76
+ self .window .destroy ()
77
+ self .dialog_open = False
0 commit comments