Skip to content

Commit 8937c65

Browse files
committed
Fixed some bugs in the untested code.
Modified the interface slightly! This is now usable!
1 parent 2dd15b6 commit 8937c65

File tree

2 files changed

+52
-50
lines changed

2 files changed

+52
-50
lines changed

__init__.py

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,77 @@
1+
import os
12
import gtk
23

34

45
# Create a generic interface for displaying pages of settings
56

67
class Settings(object):
78

8-
def __init__(self,page_classes):
9+
def __init__(self,parent = None,page_classes = []):
910
self.pages = {}
11+
self.dialog_open = False
12+
self.parent = parent
1013
for c in page_classes:
1114
self.add_settings_interface(c)
1215

1316
# This function can be called to add a interface
1417
# Each one of these will display as a seperate page in the settings window
1518
# 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...)
1720
def add_settings_interface(self,setting_class):
1821
if setting_class.name in self.pages:
1922
return False
2023
self.pages[setting_class.name] = setting_class()
2124
return True
2225

2326
# 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):
2528
return self.pages[settings_class.name].get_value(value_name)
2629

2730
# 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)
3936

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
5048

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()
5161

5262
def on_save(self,widget):
5363
# Save the settings
54-
for page in self.pages:
64+
for page in self.pages.values():
5565
page.save()
66+
self.close()
5667

5768
def on_cancel(self,widget):
5869
self.close()
5970

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

settings_interface.glade

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,21 @@
44
<!-- interface-naming-policy project-wide -->
55
<object class="GtkWindow" id="window">
66
<property name="can_focus">False</property>
7+
<property name="title" translatable="yes">Preferences</property>
8+
<property name="window_position">center-on-parent</property>
9+
<property name="default_width">750</property>
10+
<property name="default_height">550</property>
11+
<signal name="delete-event" handler="close" swapped="no"/>
712
<child>
813
<object class="GtkVBox" id="vbox1">
914
<property name="visible">True</property>
1015
<property name="can_focus">False</property>
1116
<child>
12-
<object class="GtkFrame" id="frame1">
17+
<object class="GtkNotebook" id="notebook">
1318
<property name="visible">True</property>
14-
<property name="can_focus">False</property>
15-
<property name="border_width">7</property>
16-
<property name="label_xalign">0.029999999329447746</property>
17-
<child>
18-
<object class="GtkNotebook" id="notebook">
19-
<property name="visible">True</property>
20-
<property name="can_focus">True</property>
21-
<property name="tab_pos">left</property>
22-
<property name="scrollable">True</property>
23-
</object>
24-
</child>
25-
<child type="label">
26-
<object class="GtkLabel" id="label1">
27-
<property name="visible">True</property>
28-
<property name="can_focus">False</property>
29-
<property name="label" translatable="yes">&lt;b&gt;Settings&lt;/b&gt;</property>
30-
<property name="use_markup">True</property>
31-
</object>
32-
</child>
19+
<property name="can_focus">True</property>
20+
<property name="tab_pos">left</property>
21+
<property name="scrollable">True</property>
3322
</object>
3423
<packing>
3524
<property name="expand">True</property>

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy