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
120
121
122
123
124
125
126
127
128
129
130
131
|
# -*- coding: utf-8 -*-
### BEGIN LICENSE
# Copyright (C) 2009 Jono Bacon <jono@ubuntu.com>
#This program is free software: you can redistribute it and/or modify it
#under the terms of the GNU General Public License version 3, as published
#by the Free Software Foundation.
#
#This program is distributed in the hope that it will be useful, but
#WITHOUT ANY WARRANTY; without even the implied warranties of
#MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
#PURPOSE. See the GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License along
#with this program. If not, see <http://www.gnu.org/licenses/>.
### 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.set_translation_domain('acire')
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()
|