1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
# -*- coding: utf-8 -*-
### BEGIN LICENSE
# This file is in the public domain
### END LICENSE
import sys
import os
import gtk
from desktopcouch.records.server import CouchDatabase
from desktopcouch.records.record import Record
from acire.acireconfig import getdatapath
class PreferencesAcireDialog(gtk.Dialog):
__gtype_name__ = "PreferencesAcireDialog"
prefernces = {}
def __init__(self):
"""__init__ - This function is typically not called directly.
Creation of a PreferencesAcireDialog requires redeading the associated ui
file and parsing the ui definition extrenally,
and then calling PreferencesAcireDialog.finish_initializing().
Use the convenience function NewPreferencesAcireDialog to create
NewAboutAcireDialog objects.
"""
pass
def finish_initializing(self, builder):
"""finish_initalizing should be called after parsing the ui definition
and creating a AboutAcireDialog object with it in order to finish
initializing the start of the new AboutAcireDialog instance.
"""
#get a reference to the builder and set up the signals
self.builder = builder
self.builder.connect_signals(self)
#set up couchdb and the preference info
self.__db_name = "acire"
self.__database = CouchDatabase(self.__db_name, create=True)
self.__preferences = None
self.__key = None
#set the record type and then initalize the preferences
self.__record_type = "http://wiki.ubuntu.com/Quickly/RecordTypes/Acire/Preferences"
self.__preferences = self.get_preferences()
#TODO:code for other initialization actions should be added here
def get_preferences(self):
"""get_preferences -returns a dictionary object that contain
preferences for acire. Creates a couchdb record if
necessary.
"""
if self.__preferences == None: #the dialog is initializing
self.__load_preferences()
#if there were no saved preference, this
return self.__preferences
def __load_preferences(self):
#TODO: add prefernces to the self.__preferences dict
#default preferences that will be overwritten if some are saved
self.__preferences = {"record_type":self.__record_type}
results = self.__database.get_records(record_type=self.__record_type, create_view=True)
if len(results.rows) == 0:
#no preferences have ever been saved
#save them before returning
self.__key = self.__database.put_record(Record(self.__preferences))
else:
self.__preferences = results.rows[0].value
self.__key = results.rows[0].value["_id"]
def __save_preferences(self):
self.__database.update_fields(self.__key, self.__preferences)
def ok(self, widget, data=None):
"""ok - The user has elected to save the changes.
Called before the dialog returns gtk.RESONSE_OK from run().
"""
#make any updates to self.__preferences here
#self.__preferences["preference1"] = "value2"
self.__save_preferences()
def cancel(self, widget, data=None):
"""cancel - The user has elected cancel changes.
Called before the dialog returns gtk.RESPONSE_CANCEL for run()
"""
#restore any changes to self.__preferences here
pass
def NewPreferencesAcireDialog():
"""NewPreferencesAcireDialog - returns a fully instantiated
PreferencesAcireDialog object. Use this function rather than
creating a PreferencesAcireDialog instance directly.
"""
#look for the ui file that describes the ui
ui_filename = os.path.join(getdatapath(), 'ui', 'PreferencesAcireDialog.ui')
if not os.path.exists(ui_filename):
ui_filename = None
builder = gtk.Builder()
builder.add_from_file(ui_filename)
dialog = builder.get_object("preferences_acire_dialog")
dialog.finish_initializing(builder)
return dialog
if __name__ == "__main__":
dialog = NewPreferencesAcireDialog()
dialog.show()
gtk.main()
|