Merge lp:~mblayman/entertainer/fix-setup-for-2.6 into lp:entertainer/future
- fix-setup-for-2.6
- Merge into entertainer-future
Proposed by
Matt Layman
Status: | Merged | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Approved by: | Paul Hummer | ||||||||||||||||
Approved revision: | 411 | ||||||||||||||||
Merged at revision: | not available | ||||||||||||||||
Proposed branch: | lp:~mblayman/entertainer/fix-setup-for-2.6 | ||||||||||||||||
Merge into: | lp:entertainer/future | ||||||||||||||||
Diff against target: | None lines | ||||||||||||||||
To merge this branch: | bzr merge lp:~mblayman/entertainer/fix-setup-for-2.6 | ||||||||||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Paul Hummer | Approve | ||
Review via email: mp+10786@code.launchpad.net |
Commit message
Entertainer conforms to the XDG directory specification.
Description of the change
To post a comment you must log in.
Revision history for this message
Matt Layman (mblayman) wrote : | # |
- 411. By Matt Layman
-
Fixed translation setup so that it doesn't install from a hardcoded path.
Revision history for this message
Paul Hummer (rockstar) wrote : | # |
Awesome! Thanks for doing this.
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'cfg/content.conf' |
2 | --- cfg/content.conf 2009-05-31 17:11:16 +0000 |
3 | +++ cfg/content.conf 2009-08-16 22:19:22 +0000 |
4 | @@ -1,26 +1,34 @@ |
5 | # Copyright (c) 2009 Entertainer Developers - See COPYING - GPLv2 |
6 | -[Images] |
7 | -folders = |
8 | -display_hidden_files_folders = False |
9 | +[Media] |
10 | +download_lyrics = False |
11 | +download_album_art = True |
12 | +download_metadata = True |
13 | +display_eject_in_menu = False |
14 | +folders = |
15 | |
16 | [Weather] |
17 | location = Bath,England |
18 | display_in_menu = True |
19 | -metric_units = True |
20 | - |
21 | -[Music] |
22 | -folders = |
23 | -download_lyrics = False |
24 | -download_album_art = True |
25 | - |
26 | -[Videos] |
27 | -folders = |
28 | -download_metadata = True |
29 | |
30 | [RSS] |
31 | -feeds = http://theironlion.net/feeds/blog;http://www.joshuascotton.com/main/archives/tag/entertainer/feed;http://laymanstermsdev.wordpress.com/feed |
32 | +feeds = http://theironlion.net/blog/feed;http://www.joshuascotton.com/main/archives/tag/entertainer/feed;http://laymanstermsdev.wordpress.com/feed |
33 | fetch_interval = 15 |
34 | |
35 | [CD] |
36 | display_eject_in_menu = False |
37 | |
38 | +[Photographs] |
39 | +slideshow_step = 5 |
40 | + |
41 | +[General] |
42 | +stage_width = 1366 |
43 | +stage_height = 768 |
44 | +show_effects = True |
45 | +start_in_fullscreen = True |
46 | +theme = Default |
47 | +backend_port = 45054 |
48 | +history_size = 8 |
49 | +transition_effect = Slide |
50 | +start_server_auto = True |
51 | +display_icon = False |
52 | + |
53 | |
54 | === removed file 'cfg/preferences.conf' |
55 | --- cfg/preferences.conf 2009-05-06 03:40:22 +0000 |
56 | +++ cfg/preferences.conf 1970-01-01 00:00:00 +0000 |
57 | @@ -1,16 +0,0 @@ |
58 | -# Copyright (c) 2009 Entertainer Developers - See COPYING - GPLv2 |
59 | -[Photographs] |
60 | -slideshow_step = 5 |
61 | - |
62 | -[General] |
63 | -stage_width = 1366 |
64 | -stage_height = 768 |
65 | -show_effects = True |
66 | -start_in_fullscreen = True |
67 | -theme = Default |
68 | -backend_port = 45054 |
69 | -history_size = 8 |
70 | -transition_effect = Slide |
71 | -start_server_auto = True |
72 | -display_icon = False |
73 | - |
74 | |
75 | === modified file 'docs/DEPENDENCIES' |
76 | --- docs/DEPENDENCIES 2009-05-09 19:08:39 +0000 |
77 | +++ docs/DEPENDENCIES 2009-08-25 02:51:36 +0000 |
78 | @@ -14,3 +14,4 @@ |
79 | python-pyvorbis |
80 | python-storm |
81 | python-twisted |
82 | +python-xdg |
83 | |
84 | === renamed file 'entertainer-content-manager' => 'entertainer-manager' |
85 | --- entertainer-content-manager 2009-05-10 17:36:49 +0000 |
86 | +++ entertainer-manager 2009-08-23 01:01:18 +0000 |
87 | @@ -1,14 +1,14 @@ |
88 | #!/usr/bin/env python |
89 | # Copyright (c) 2009 Entertainer Developers - See COPYING - GPLv2 |
90 | -'''Content Management executable''' |
91 | +'''Manager executable''' |
92 | |
93 | import gtk |
94 | |
95 | from entertainerlib.client.translation_setup import TranslationSetup |
96 | TranslationSetup() |
97 | |
98 | -from entertainerlib.dialog import ContentManagementDialog |
99 | - |
100 | - |
101 | -ContentManagementDialog(True) |
102 | +from entertainerlib.dialog import ManagerDialog |
103 | + |
104 | + |
105 | +ManagerDialog(True) |
106 | gtk.main() |
107 | |
108 | === removed file 'entertainer-preferences' |
109 | --- entertainer-preferences 2009-05-10 17:36:49 +0000 |
110 | +++ entertainer-preferences 1970-01-01 00:00:00 +0000 |
111 | @@ -1,14 +0,0 @@ |
112 | -#!/usr/bin/env python |
113 | -# Copyright (c) 2009 Entertainer Developers - See COPYING - GPLv2 |
114 | -'''A preferences editing tool''' |
115 | - |
116 | -import gtk |
117 | - |
118 | -from entertainerlib.client.translation_setup import TranslationSetup |
119 | -TranslationSetup() |
120 | - |
121 | -from entertainerlib.dialog import PreferencesDialog |
122 | - |
123 | - |
124 | -PreferencesDialog(True) |
125 | -gtk.main() |
126 | |
127 | === modified file 'entertainerlib/backend/backend_server.py' |
128 | --- entertainerlib/backend/backend_server.py 2009-05-10 17:36:49 +0000 |
129 | +++ entertainerlib/backend/backend_server.py 2009-08-23 01:16:18 +0000 |
130 | @@ -39,18 +39,13 @@ |
131 | self.config = Configuration() |
132 | self.logger = Logger().getLogger('backend.BackendServer') |
133 | self.message_bus = MessageBus() |
134 | - self._port = self.config.get_port() |
135 | + self._port = self.config.port |
136 | |
137 | # Connection server - Thread that listens incoming socket connections |
138 | self.connection_server = None |
139 | |
140 | - # Config files |
141 | - self.content_config = None |
142 | - self.preferences = None |
143 | - |
144 | self.scheduler = None |
145 | self.feed_manager = None |
146 | - self.guide_updater = None |
147 | self.media_manager = None |
148 | |
149 | # The order of the initialize method calls is significant! Don't change |
150 | @@ -65,15 +60,13 @@ |
151 | """Initialize configuration""" |
152 | cfg_dict = { |
153 | MessageType.CONTENT_CONF_UPDATED : MessagePriority.VERY_HIGH, |
154 | - MessageType.PREFERENCES_CONF_UPDATED : MessagePriority.VERY_HIGH |
155 | } |
156 | self.message_bus.registerMessageHandler(self.config, cfg_dict) |
157 | self.logger.debug("Configuration intialized successfully") |
158 | |
159 | def initialize_connection_server(self): |
160 | """Initialize connection server.""" |
161 | - self.connection_server = ConnectionServer(self._port, |
162 | - self.message_bus) |
163 | + self.connection_server = ConnectionServer(self._port, self.message_bus) |
164 | # Start listening incoming connections |
165 | self.connection_server.start() |
166 | |
167 | @@ -81,7 +74,7 @@ |
168 | """Initialize message scheduler.""" |
169 | self.scheduler = MessageScheduler(self.message_bus) |
170 | self.scheduler.addMessage(Message(MessageType.UPDATE_FEEDS), |
171 | - 60 * self.config.get_feed_fetch_interval()) |
172 | + 60 * self.config.feed_fetch_interval) |
173 | self.logger.debug("Message scheduler intialized successfully") |
174 | |
175 | def initialize_feed_manager(self): |
176 | |
177 | === modified file 'entertainerlib/backend/components/feeds/feed_manager.py' |
178 | --- entertainerlib/backend/components/feeds/feed_manager.py 2009-05-10 17:36:49 +0000 |
179 | +++ entertainerlib/backend/components/feeds/feed_manager.py 2009-08-16 23:01:49 +0000 |
180 | @@ -35,8 +35,7 @@ |
181 | Update all feeds to cache in a new thread and after |
182 | that emit FEED_DB_UPDATED message to the messagebus. |
183 | """ |
184 | - fetch_thread = FeedFetcher(self.message_bus, |
185 | - self.config.get_feeds()) |
186 | + fetch_thread = FeedFetcher(self.message_bus, self.config.feeds) |
187 | fetch_thread.start() |
188 | |
189 | def createFeedCacheDatabase(self): |
190 | |
191 | === modified file 'entertainerlib/backend/components/mediacache/image_cache.py' |
192 | --- entertainerlib/backend/components/mediacache/image_cache.py 2009-06-30 01:06:01 +0000 |
193 | +++ entertainerlib/backend/components/mediacache/image_cache.py 2009-08-16 18:51:06 +0000 |
194 | @@ -117,15 +117,13 @@ |
195 | "Path doesn't exist: " + path) |
196 | else: |
197 | for root, dirs, files in os.walk(path): |
198 | - if os.path.split(root)[-1][0] == "." and not \ |
199 | - self.config.display_hidden_files_folders(): |
200 | + if os.path.split(root)[-1][0] == ".": |
201 | continue |
202 | if not self.isDirectoryInCache(root): |
203 | self._addAlbum(root) |
204 | |
205 | for name in files: |
206 | - if os.path.split(name)[-1][0] == "." and not \ |
207 | - self.config.display_hidden_files_folders(): |
208 | + if os.path.split(name)[-1][0] == ".": |
209 | continue |
210 | if self.isSupportedFormat(name): |
211 | self.addFile(os.path.join(root, name)) |
212 | |
213 | === modified file 'entertainerlib/backend/components/mediacache/media_cache_manager.py' |
214 | --- entertainerlib/backend/components/mediacache/media_cache_manager.py 2009-05-10 17:36:49 +0000 |
215 | +++ entertainerlib/backend/components/mediacache/media_cache_manager.py 2009-08-16 22:19:22 +0000 |
216 | @@ -23,11 +23,11 @@ |
217 | self.logger = Logger().getLogger( |
218 | 'backend.components.mediacache.MediaCacheManager') |
219 | self.config = Configuration() |
220 | - self.video_folders = self.config.get_video_folders() |
221 | + self.video_folders = self.config.media_folders |
222 | self._index_videos(self.video_folders) |
223 | - self.music_folders = self.config.get_music_folders() |
224 | + self.music_folders = self.config.media_folders |
225 | self._index_music(self.music_folders) |
226 | - self.image_folders = self.config.get_image_folders() |
227 | + self.image_folders = self.config.media_folders |
228 | self._index_images(self.image_folders) |
229 | |
230 | # Should we rebuild to detect files that were removed while backend was |
231 | @@ -104,9 +104,9 @@ |
232 | we need to index them. If folders are removed, we need to remove |
233 | them from the cache and also from FileSystemObeserver. |
234 | """ |
235 | - updated_video_folders = self.config.get_video_folders() |
236 | - updated_music_folders = self.config.get_music_folders() |
237 | - updated_image_folders = self.config.get_image_folders() |
238 | + updated_video_folders = self.config.media_folders |
239 | + updated_music_folders = self.config.media_folders |
240 | + updated_image_folders = self.config.media_folders |
241 | |
242 | # Handle image folder changes |
243 | current_images = set(self.image_folders) |
244 | |
245 | === modified file 'entertainerlib/backend/components/mediacache/music_cache.py' |
246 | --- entertainerlib/backend/components/mediacache/music_cache.py 2009-05-10 17:36:49 +0000 |
247 | +++ entertainerlib/backend/components/mediacache/music_cache.py 2009-08-18 02:50:40 +0000 |
248 | @@ -433,7 +433,7 @@ |
249 | album_art_file) |
250 | # Local not found -> try internet |
251 | else: |
252 | - if self.config.download_album_art(): |
253 | + if self.config.download_album_art: |
254 | if album != "Unknown album" and artist != "Unknown Artist": |
255 | loader_thread = AlbumArtDownloader(album, artist, |
256 | self.config.ALBUM_ART_DIR) |
257 | |
258 | === modified file 'entertainerlib/backend/components/mediacache/video_cache.py' |
259 | --- entertainerlib/backend/components/mediacache/video_cache.py 2009-05-10 17:36:49 +0000 |
260 | +++ entertainerlib/backend/components/mediacache/video_cache.py 2009-08-18 02:45:02 +0000 |
261 | @@ -243,7 +243,7 @@ |
262 | VALUES (:fn)""", |
263 | { "fn" : filename } ) |
264 | self.__db_conn.commit() |
265 | - if self.config.download_video_metadata(): |
266 | + if self.config.download_metadata: |
267 | self.__searchMetadata(filename) |
268 | |
269 | def __searchMetadata(self, filename): |
270 | |
271 | === modified file 'entertainerlib/backend/core/message_bus_proxy.py' |
272 | --- entertainerlib/backend/core/message_bus_proxy.py 2009-05-10 17:36:49 +0000 |
273 | +++ entertainerlib/backend/core/message_bus_proxy.py 2009-08-16 22:03:14 +0000 |
274 | @@ -57,7 +57,7 @@ |
275 | MessageHandler. |
276 | """ |
277 | # Open socket |
278 | - self.socket_to_server.connect(('localhost', self.config.get_port())) |
279 | + self.socket_to_server.connect(('localhost', self.config.port)) |
280 | |
281 | # Send client name |
282 | self.socket_to_server.sendall(self.client_name + "\n") |
283 | |
284 | === modified file 'entertainerlib/backend/core/message_type_priority.py' |
285 | --- entertainerlib/backend/core/message_type_priority.py 2009-05-10 17:36:49 +0000 |
286 | +++ entertainerlib/backend/core/message_type_priority.py 2009-08-23 01:16:18 +0000 |
287 | @@ -25,7 +25,7 @@ |
288 | """ |
289 | |
290 | # Indicates that Preferences UI has been used to update preferences. |
291 | - PREFERENCES_CONF_UPDATED = 0 |
292 | + NOT_USED_7 = 0 |
293 | |
294 | # Indicates that Content Management UI has been used to update contents. |
295 | CONTENT_CONF_UPDATED = 1 |
296 | |
297 | === modified file 'entertainerlib/client/__init__.py' |
298 | --- entertainerlib/client/__init__.py 2009-05-10 17:36:49 +0000 |
299 | +++ entertainerlib/client/__init__.py 2009-08-21 01:55:09 +0000 |
300 | @@ -27,7 +27,7 @@ |
301 | clutter.threads_init() |
302 | |
303 | config = Configuration() |
304 | - if config.start_auto_server(): |
305 | + if config.start_auto_server: |
306 | print "Entertainer backend starting..." |
307 | BackendServer() |
308 | |
309 | |
310 | === modified file 'entertainerlib/client/backend_connection.py' |
311 | --- entertainerlib/client/backend_connection.py 2009-05-06 02:58:08 +0000 |
312 | +++ entertainerlib/client/backend_connection.py 2009-08-23 01:16:18 +0000 |
313 | @@ -16,7 +16,6 @@ |
314 | """Initialize connection. Connects to backend.""" |
315 | #messages = { |
316 | # MessageType.CONTENT_CONF_UPDATED : MessagePriority.NORMAL, |
317 | - # MessageType.PREFERENCES_CONF_UPDATED : MessagePriority.NORMAL, |
318 | # MessageType.FEED_DB_UPDATED : MessagePriority.HIGH } |
319 | # XXX: rockstar - The messages above are the "real" messages, and I'm |
320 | # not sure why they are commented out. Anyone? |
321 | @@ -48,8 +47,6 @@ |
322 | """Handle received messages. (Implements MessageHandler interface)""" |
323 | if message.get_type() == MessageType.CONTENT_CONF_UPDATED: |
324 | pass |
325 | - elif message.get_type() == MessageType.PREFERENCES_CONF_UPDATED: |
326 | - pass |
327 | elif message.get_type() == MessageType.FEED_DB_UPDATED: |
328 | pass |
329 | |
330 | |
331 | === modified file 'entertainerlib/client/client.py' |
332 | --- entertainerlib/client/client.py 2009-05-10 17:47:23 +0000 |
333 | +++ entertainerlib/client/client.py 2009-08-16 21:53:22 +0000 |
334 | @@ -50,7 +50,7 @@ |
335 | feed_library, image_library, music_library, video_library, |
336 | self.quit_client) |
337 | |
338 | - if config.tray_icon_enabled(): |
339 | + if config.tray_icon_enabled: |
340 | SystemTrayIcon( |
341 | self.quit_client, self.toggle_interface_visibility) |
342 | |
343 | |
344 | === modified file 'entertainerlib/client/medialibrary/videos.py' |
345 | --- entertainerlib/client/medialibrary/videos.py 2009-05-10 17:36:49 +0000 |
346 | +++ entertainerlib/client/medialibrary/videos.py 2009-08-16 21:48:15 +0000 |
347 | @@ -220,12 +220,12 @@ |
348 | else: |
349 | self.logger.error("Thumbnail does not exist for " + \ |
350 | self.get_filename() + ", using default art instead") |
351 | - return os.path.join(self.config.get_theme_path(), |
352 | + return os.path.join(self.config.theme_path, |
353 | "images/default_movie_art.png") |
354 | else: |
355 | self.logger.error("Thumbnail does not exist for " + \ |
356 | self.get_filename() + ", using default art instead") |
357 | - return os.path.join(self.config.get_theme_path(), |
358 | + return os.path.join(self.config.theme_path, |
359 | "images/default_movie_art.png") |
360 | |
361 | def has_thumbnail(self): |
362 | |
363 | === modified file 'entertainerlib/configuration.py' |
364 | --- entertainerlib/configuration.py 2009-07-07 01:28:42 +0000 |
365 | +++ entertainerlib/configuration.py 2009-08-27 03:18:41 +0000 |
366 | @@ -2,35 +2,20 @@ |
367 | '''Configuration - Class represents Entertainer's configuration''' |
368 | |
369 | import os |
370 | -import sys |
371 | import shutil |
372 | import ConfigParser |
373 | -from ConfigParser import ParsingError, NoSectionError, NoOptionError |
374 | - |
375 | +from ConfigParser import NoSectionError, NoOptionError |
376 | + |
377 | +from xdg import BaseDirectory |
378 | + |
379 | +from entertainerlib.backend.core.message_handler import MessageHandler |
380 | from entertainerlib.backend.core.message_type_priority import MessageType |
381 | -from entertainerlib.backend.core.message_handler import MessageHandler |
382 | from entertainerlib.db.connection import Database |
383 | - |
384 | from entertainerlib.gui.theme import Theme |
385 | |
386 | -SOURCE_CONFIG = { |
387 | - 'branch' : os.path.abspath(os.path.dirname(__file__) + '/../cfg'), |
388 | - # Hardcoded path for a package install |
389 | - 'package' : "/usr/share/entertainer/cfg" |
390 | - } |
391 | - |
392 | class Configuration(MessageHandler): |
393 | - """ |
394 | - Configuration of Entertainer |
395 | - |
396 | - This class is an interface to all configuration parameters. All components |
397 | - of Entertainer should get configuration values through this class. Object |
398 | - from this class reads current config files and returns values based on |
399 | - those files. If there are missing lines or other errors in config file, |
400 | - then object return default values defined in this class. |
401 | - """ |
402 | - |
403 | - CFG_DIR = os.path.expanduser("~/.config/entertainer") |
404 | + '''Interface to all configuration parameters. All components of Entertainer |
405 | + should get configuration values through this class.''' |
406 | |
407 | _shared_state = {} |
408 | |
409 | @@ -41,52 +26,35 @@ |
410 | if not self._shared_state or test_dir is not None: |
411 | # Set in a production mode or a test mode |
412 | if test_dir is None: |
413 | - self.cfg_dir = self.CFG_DIR |
414 | + self.resources = Resources() |
415 | else: |
416 | - self.cfg_dir = test_dir |
417 | - |
418 | - if not os.path.exists(os.path.expanduser(self.cfg_dir)): |
419 | - self.create_cfg_dir() |
420 | - |
421 | - self.ENTERTAINER_LOG = os.path.join(self.cfg_dir, |
422 | - u'entertainer.log') |
423 | - |
424 | - self.MEDIA_DB = Database(os.path.join(self.cfg_dir, 'cache/media')) |
425 | - |
426 | - self.FEED_DB = os.path.join(self.cfg_dir, 'cache/feed.db') |
427 | - self.IMAGE_DB = os.path.join(self.cfg_dir, 'cache/image.db') |
428 | - self.MUSIC_DB = os.path.join(self.cfg_dir, 'cache/music.db') |
429 | - self.VIDEO_DB = os.path.join(self.cfg_dir, 'cache/video.db') |
430 | - |
431 | - self.THUMB_DIR = os.path.join(self.cfg_dir, 'cache', 'thumbnails') |
432 | + self.resources = Resources(config_testing_dir=test_dir) |
433 | + |
434 | + self.cache_dir = self.resources.cache_dir |
435 | + self.config_dir = self.resources.config_dir |
436 | + self.data_dir = self.resources.data_dir |
437 | + |
438 | + self.LOG = os.path.join(self.cache_dir, u'entertainer.log') |
439 | + |
440 | + self.MEDIA_DB = Database(os.path.join(self.cache_dir, 'media')) |
441 | + |
442 | + self.FEED_DB = os.path.join(self.cache_dir, 'feed.db') |
443 | + self.IMAGE_DB = os.path.join(self.cache_dir, 'image.db') |
444 | + self.MUSIC_DB = os.path.join(self.cache_dir, 'music.db') |
445 | + self.VIDEO_DB = os.path.join(self.cache_dir, 'video.db') |
446 | + |
447 | + self.THUMB_DIR = os.path.join(self.cache_dir, 'thumbnails') |
448 | self.IMAGE_THUMB_DIR = os.path.join(self.THUMB_DIR, 'image') |
449 | self.VIDEO_THUMB_DIR = os.path.join(self.THUMB_DIR, 'video') |
450 | - self.ALBUM_ART_DIR = os.path.join(self.cfg_dir, 'cache/album_art') |
451 | - self.MOVIE_ART_DIR = os.path.join(self.cfg_dir, 'cache/movie_art') |
452 | - |
453 | - # Preferences file |
454 | - self.preferences_conf = os.path.join(self.cfg_dir, |
455 | - 'preferences.conf') |
456 | - |
457 | - # Content file |
458 | - self.content_conf = os.path.join(self.cfg_dir, 'content.conf') |
459 | - |
460 | - self.content_config = ConfigParser.ConfigParser() |
461 | - self.preferences = ConfigParser.ConfigParser() |
462 | - try: |
463 | - self.content_config.readfp(open(self.content_conf)) |
464 | - self.preferences.readfp(open(self.preferences_conf)) |
465 | - except ParsingError: |
466 | - print("ParsingError with configuration file.") |
467 | - sys.exit(1) |
468 | - except IOError: |
469 | - print("IOError: Couldn't read configuration file.") |
470 | - sys.exit(1) |
471 | - |
472 | - self.theme = Theme(self.get_theme_path()) |
473 | - |
474 | - self.stage_width = None |
475 | - self.stage_height = None |
476 | + self.ALBUM_ART_DIR = os.path.join(self.cache_dir, 'album_art') |
477 | + self.MOVIE_ART_DIR = os.path.join(self.cache_dir, 'movie_art') |
478 | + |
479 | + self.read_config_file() |
480 | + |
481 | + self.theme = Theme(self.theme_path) |
482 | + |
483 | + self._stage_width = None |
484 | + self._stage_height = None |
485 | |
486 | # Network options specify the server type and extra options |
487 | self.network_options = { |
488 | @@ -94,360 +62,157 @@ |
489 | 'host': 'localhost', |
490 | 'port': 55545} |
491 | |
492 | - def create_cfg_dir(self): |
493 | - '''Create a configuration directory and default config files.''' |
494 | - |
495 | - def create_cache_hierarchy(config_dir): |
496 | - '''Create the directories needed for the cache''' |
497 | - directories = [ |
498 | - 'cache', |
499 | - 'cache/album_art', |
500 | - 'cache/movie_art', |
501 | - 'cache/thumbnails', |
502 | - 'cache/thumbnails/image', |
503 | - 'cache/thumbnails/video' |
504 | - ] |
505 | - |
506 | - for directory in directories: |
507 | - new_dir = os.path.join(config_dir, directory) |
508 | - os.mkdir(new_dir) |
509 | - |
510 | - config_dir = self.get_cfg_dir() |
511 | - try: |
512 | - # Copy configuration data from a dev branch if we can |
513 | - if os.path.exists(SOURCE_CONFIG['branch']): |
514 | - shutil.copytree(SOURCE_CONFIG['branch'], config_dir) |
515 | - create_cache_hierarchy(config_dir) |
516 | - # Install configuration data from the hardcoded package path |
517 | - elif os.path.exists(SOURCE_CONFIG['package']): |
518 | - shutil.copytree(SOURCE_CONFIG['package'], config_dir) |
519 | - create_cache_hierarchy(config_dir) |
520 | - else: |
521 | - print "Couldn't find configuration data. Execution aborted." |
522 | - sys.exit(1) |
523 | - except OSError: |
524 | - print "Couldn't copy configuration data to %s. Execution aborted." \ |
525 | - % config_dir |
526 | - sys.exit(1) |
527 | + def read_config_file(self): |
528 | + '''Read in the config file.''' |
529 | + self.content_conf = os.path.join(self.config_dir, 'content.conf') |
530 | + self.content = ConfigParser.ConfigParser() |
531 | + self.content.readfp(open(self.content_conf)) |
532 | |
533 | def update_configuration(self): |
534 | - """ |
535 | - Read configuration files again and update this object. |
536 | - """ |
537 | - try: |
538 | - self.content_config.readfp(open(self.content_conf)) |
539 | - self.preferences.readfp(open(self.preferences_conf)) |
540 | - except ParsingError: |
541 | - raise Exception("Syntax error in configuration file.") |
542 | - except IOError: |
543 | - raise IOError("Couldn't read config file.") |
544 | + '''Read configuration file again and update this object.''' |
545 | + self.content.readfp(open(self.content_conf)) |
546 | |
547 | def write_content_value(self, section, option, value): |
548 | """Write a new value to the content configuration file.""" |
549 | - try: |
550 | - self.content_config.set(section, option, value) |
551 | + |
552 | + def write_value(section, option, value): |
553 | + '''Actually write the value to the section and option.''' |
554 | + self.content.set(section, option, value) |
555 | cfg_file = file(self.content_conf, 'w') |
556 | - self.content_config.write(cfg_file) |
557 | + self.content.write(cfg_file) |
558 | + |
559 | + try: |
560 | + write_value(section, option, value) |
561 | except NoSectionError: |
562 | - raise Exception("No Section to set in content.conf file") |
563 | + # Provide an upgrade path to additions of new sections. |
564 | + shutil.rmtree(self.config_dir) |
565 | + self.resources.create_configuration() |
566 | + self.read_config_file() |
567 | + write_value(section, option, value) |
568 | except NoOptionError: |
569 | raise Exception("No Option to set in content.conf file") |
570 | |
571 | - def write_preference_value(self, section, option, value): |
572 | - """Write a new value to the preferences configuration file.""" |
573 | - try: |
574 | - self.preferences.set(section, option, value) |
575 | - cfg_file = file(self.preferences_conf, 'w') |
576 | - self.preferences.write(cfg_file) |
577 | - except NoSectionError: |
578 | - raise Exception("No Section to set in preferences.conf file") |
579 | - except NoOptionError: |
580 | - raise Exception("No Option to set in preferences.conf file") |
581 | - |
582 | - def get_stage_width(self): |
583 | - '''Get the stage width from the preferences''' |
584 | - if self.stage_width: |
585 | - return self.stage_width |
586 | - |
587 | - try: |
588 | - self.stage_width = self.preferences.getint("General", "stage_width") |
589 | - except (NoSectionError, NoOptionError): |
590 | - self.stage_width = 1366 # Default |
591 | - |
592 | - return self.stage_width |
593 | - |
594 | - def set_stage_width(self, new_width): |
595 | - '''Set the stage width for the in memory instance''' |
596 | - self.stage_width = new_width |
597 | - |
598 | - def get_stage_height(self): |
599 | - '''Get the stage height from the preferences''' |
600 | - if self.stage_height: |
601 | - return self.stage_height |
602 | - |
603 | - try: |
604 | - self.stage_height = self.preferences.getint("General", |
605 | - "stage_height") |
606 | - except (NoSectionError, NoOptionError): |
607 | - self.stage_height = 768 # Default |
608 | - |
609 | - return self.stage_height |
610 | - |
611 | - def set_stage_height(self, new_height): |
612 | - '''Set the stage height for the in memory instance''' |
613 | - self.stage_height = new_height |
614 | - |
615 | - def get_theme_path(self): |
616 | - """ |
617 | - Get absolute path of the used theme. |
618 | - @return: string (path) |
619 | - """ |
620 | - theme_path = os.path.join(self.get_cfg_dir(), 'themes') |
621 | - try: |
622 | - theme = self.preferences.get("General", "theme") |
623 | - except (NoSectionError, NoOptionError): |
624 | - return os.path.join(theme_path, "Default") |
625 | - |
626 | - if os.path.exists(os.path.join(theme_path, theme)): |
627 | - return os.path.join(theme_path, theme) |
628 | - else: |
629 | - return os.path.join(theme_path, "Default") |
630 | - |
631 | + def _get_stage_width(self): |
632 | + '''stage_width property getter.''' |
633 | + if self._stage_width: |
634 | + return self._stage_width |
635 | + |
636 | + self._stage_width = self.content.getint("General", "stage_width") |
637 | + return self._stage_width |
638 | + |
639 | + def _set_stage_width(self, new_width): |
640 | + '''stage_width property setter.''' |
641 | + self._stage_width = new_width |
642 | + |
643 | + stage_width = property(_get_stage_width, _set_stage_width) |
644 | + |
645 | + def _get_stage_height(self): |
646 | + '''stage_height property getter.''' |
647 | + if self._stage_height: |
648 | + return self._stage_height |
649 | + |
650 | + self._stage_height = self.content.getint("General", "stage_height") |
651 | + return self._stage_height |
652 | + |
653 | + def _set_stage_height(self, new_height): |
654 | + '''stage_height property setter.''' |
655 | + self._stage_height = new_height |
656 | + |
657 | + stage_height = property(_get_stage_height, _set_stage_height) |
658 | + |
659 | + @property |
660 | + def theme_path(self): |
661 | + '''Path to the currently selected theme.''' |
662 | + theme_path = os.path.join(self.data_dir, 'themes') |
663 | + theme = self.content.get("General", "theme") |
664 | + return os.path.join(theme_path, theme) |
665 | + |
666 | + @property |
667 | def tray_icon_enabled(self): |
668 | - """ |
669 | - Display tray icon. |
670 | - @return: boolean |
671 | - """ |
672 | - try: |
673 | - result = self.preferences.getboolean("General", "display_icon") |
674 | - except (NoSectionError, NoOptionError): |
675 | - return False |
676 | - return result |
677 | - |
678 | - def get_feed_fetch_interval(self): |
679 | - """ |
680 | - Get time interval (in minutes) for feed fetching. |
681 | - @return: Integer |
682 | - """ |
683 | - try: |
684 | - result = self.content_config.getint("RSS", "fetch_interval") |
685 | - except (NoSectionError, NoOptionError): |
686 | - return 60 # Default is one hour |
687 | - return result |
688 | - |
689 | - def get_port(self): |
690 | - """ |
691 | - Get backend server's port number. |
692 | - @return: Integer |
693 | - """ |
694 | - try: |
695 | - result = self.preferences.getint("General", "backend_port") |
696 | - except (NoSectionError, NoOptionError): |
697 | - return 45054 # Default port |
698 | - return result |
699 | - |
700 | - def get_video_folders(self): |
701 | - """ |
702 | - Get list of video folders |
703 | - @return:String Array |
704 | - """ |
705 | - try: |
706 | - video_list = self.content_config.get("Videos", "folders") |
707 | - result = self._is_valid_media_folder(video_list.split(';')) |
708 | - except (NoSectionError, NoOptionError): |
709 | - return [] |
710 | - return result |
711 | - |
712 | - def get_music_folders(self): |
713 | - """ |
714 | - Get list of music folders |
715 | - @return: String Array |
716 | - """ |
717 | - try: |
718 | - music_list = self.content_config.get("Music", "folders") |
719 | - result = music_list.split(';') |
720 | - except (NoSectionError, NoOptionError): |
721 | - return [] |
722 | - return result |
723 | - |
724 | - def get_image_folders(self): |
725 | - """ |
726 | - Get list of image folders |
727 | - @return: String Array |
728 | - """ |
729 | - try: |
730 | - image_list = self.content_config.get("Images", "folders") |
731 | - result = self._is_valid_media_folder(image_list.split(';')) |
732 | - except (NoSectionError, NoOptionError): |
733 | - return [] |
734 | - return result |
735 | - |
736 | - def get_feeds(self): |
737 | - """ |
738 | - Get list of feeds. |
739 | - @return: String Array |
740 | - """ |
741 | - try: |
742 | - rss_feeds = self.content_config.get("RSS", "feeds") |
743 | - result = rss_feeds.split(';') |
744 | - except (NoSectionError, NoOptionError): |
745 | - return [] |
746 | - return result |
747 | - |
748 | - def get_weather_location(self): |
749 | - """ |
750 | - Get list of weather location codes. |
751 | - @return: List of strings |
752 | - """ |
753 | - try: |
754 | - location = self.content_config.get("Weather", "location") |
755 | - except (NoSectionError, NoOptionError): |
756 | - location = '' |
757 | - return location |
758 | - |
759 | + '''Boolean to indicate whether or not to show the tray icon.''' |
760 | + return self.content.getboolean("General", "display_icon") |
761 | + |
762 | + @property |
763 | + def feed_fetch_interval(self): |
764 | + '''Time interval (in minutes) for feed fetching.''' |
765 | + return self.content.getint("RSS", "fetch_interval") |
766 | + |
767 | + @property |
768 | + def port(self): |
769 | + '''Server's port number.''' |
770 | + return self.content.getint("General", "backend_port") |
771 | + |
772 | + @property |
773 | + def media_folders(self): |
774 | + '''Return a list of folders for media.''' |
775 | + media = self.content.get("Media", "folders") |
776 | + return self._is_valid_media_folder(media.split(';')) |
777 | + |
778 | + @property |
779 | + def feeds(self): |
780 | + '''List of feeds.''' |
781 | + rss_feeds = self.content.get("RSS", "feeds") |
782 | + return rss_feeds.split(';') |
783 | + |
784 | + @property |
785 | + def weather_location(self): |
786 | + '''User's weather location.''' |
787 | + return self.content.get("Weather", "location") |
788 | + |
789 | + @property |
790 | def display_weather_in_client(self): |
791 | - """ |
792 | - Should we display weather in client |
793 | - @return: Boolean |
794 | - """ |
795 | - try: |
796 | - result = self.content_config.getboolean("Weather", |
797 | - "display_in_menu") |
798 | - except (NoSectionError, NoOptionError): |
799 | - return False |
800 | - return result |
801 | - |
802 | - def display_cd_eject_in_client(self): |
803 | - """ |
804 | - Should we display the cd eject button in client |
805 | - @return: Boolean |
806 | - """ |
807 | - try: |
808 | - result = self.content_config.getboolean("CD", |
809 | - "display_eject_in_menu") |
810 | - except (NoSectionError, NoOptionError): |
811 | - return False |
812 | - return result |
813 | - |
814 | - def download_video_metadata(self): |
815 | - """ |
816 | - Get True if video metadata should be downloaded, otherwise False |
817 | - """ |
818 | - try: |
819 | - result = self.content_config.getboolean("Videos", |
820 | - "download_metadata") |
821 | - except (NoSectionError, NoOptionError): |
822 | - return False |
823 | - return result |
824 | - |
825 | + '''Boolean to tell if weather should be displayed.''' |
826 | + return self.content.getboolean("Weather", "display_in_menu") |
827 | + |
828 | + @property |
829 | + def download_metadata(self): |
830 | + '''Boolean to tell if metadata should be downloaded.''' |
831 | + return self.content.getboolean("Media", "download_metadata") |
832 | + |
833 | + @property |
834 | def download_album_art(self): |
835 | - """ |
836 | - Download album art from the Internet. |
837 | - @return: boolean |
838 | - """ |
839 | - try: |
840 | - result = self.content_config.getboolean("Music", |
841 | - "download_album_art") |
842 | - except (NoSectionError, NoOptionError): |
843 | - return False |
844 | - return result |
845 | + '''Boolean to tell if album art should be downloaded.''' |
846 | + return self.content.getboolean("Media", "download_album_art") |
847 | |
848 | + @property |
849 | def download_lyrics(self): |
850 | - """ |
851 | - Download song lyrics from the Internet. |
852 | - @return: boolean |
853 | - """ |
854 | - try: |
855 | - result = self.content_config.getboolean("Music", "download_lyrics") |
856 | - except (NoSectionError, NoOptionError): |
857 | - return False |
858 | - return result |
859 | - |
860 | - def display_hidden_files_folders(self): |
861 | - """If True hidden files and folders will be added to image library.""" |
862 | - try: |
863 | - result = self.content_config.getboolean("Images", |
864 | - "display_hidden_files_folders") |
865 | - except (NoSectionError, NoOptionError): |
866 | - return False |
867 | - return result |
868 | - |
869 | + '''Boolean to tell if lyrics should be downloaded.''' |
870 | + return self.content.getboolean("Media", "download_lyrics") |
871 | + |
872 | + @property |
873 | def show_effects(self): |
874 | - """ |
875 | - Use animations on user interface. |
876 | - @return: boolean |
877 | - """ |
878 | - try: |
879 | - result = self.preferences.getboolean("General", "show_effects") |
880 | - except (NoSectionError, NoOptionError): |
881 | - return False |
882 | - return result |
883 | + '''Boolean to tell if effects should be shown.''' |
884 | + return self.content.getboolean("General", "show_effects") |
885 | |
886 | + @property |
887 | def transition_effect(self): |
888 | - """ |
889 | - Which transition effect should be used when switching screens. |
890 | - @return: string (name of the effect) |
891 | - """ |
892 | - try: |
893 | - result = self.preferences.get("General", "transition_effect") |
894 | - except (NoSectionError, NoOptionError): |
895 | - return False |
896 | - return result |
897 | - |
898 | - def get_theme_name(self): |
899 | - """ |
900 | - Get the name of the current theme. |
901 | - @return: string (theme name) |
902 | - """ |
903 | - try: |
904 | - result = self.preferences.get("General", "theme") |
905 | - except (NoSectionError, NoOptionError): |
906 | - result = "Default" |
907 | - return result |
908 | - |
909 | + '''Internal name of the user's selected screen transition style.''' |
910 | + return self.content.get("General", "transition_effect") |
911 | + |
912 | + @property |
913 | + def theme_name(self): |
914 | + '''Name of the current theme.''' |
915 | + return self.content.get("General", "theme") |
916 | + |
917 | + @property |
918 | def start_in_fullscreen(self): |
919 | '''Boolean to determine whether to start in fullscreen mode or not.''' |
920 | - try: |
921 | - result = self.preferences.getboolean("General", |
922 | - "start_in_fullscreen") |
923 | - except (NoSectionError, NoOptionError): |
924 | - return True |
925 | - return result |
926 | + return self.content.getboolean("General", "start_in_fullscreen") |
927 | |
928 | + @property |
929 | def start_auto_server(self): |
930 | - """ |
931 | - Return True if backend server should auto start |
932 | - @return: boolean |
933 | - """ |
934 | - try: |
935 | - result = self.preferences.getboolean("General", |
936 | - "start_server_auto") |
937 | - except (NoSectionError, NoOptionError): |
938 | - return False |
939 | - return result |
940 | + '''Boolean to tell if the server should be auto started.''' |
941 | + return self.content.getboolean("General", "start_server_auto") |
942 | |
943 | + @property |
944 | def history_size(self): |
945 | - """ |
946 | - Get screen history size. This determines how many screen are kept in |
947 | - memory when scrolling. |
948 | - @return: Integer |
949 | - """ |
950 | - try: |
951 | - result = self.preferences.getint("General", "history_size") |
952 | - except (NoSectionError, NoOptionError): |
953 | - return 10 |
954 | - return result |
955 | + '''Number of screens to hold in history.''' |
956 | + return self.content.getint("General", "history_size") |
957 | |
958 | - def get_slideshow_step(self): |
959 | - """ |
960 | - Get the slideshow step in seconds used by the photo slideshow |
961 | - @return: Integer |
962 | - """ |
963 | - try: |
964 | - result = self.preferences.getint("Photographs", "slideshow_step") |
965 | - except (NoSectionError, NoOptionError): |
966 | - return 5 |
967 | - return result |
968 | + @property |
969 | + def slideshow_step(self): |
970 | + '''Amount of seconds before the slideshow steps to the next image.''' |
971 | + return self.content.getint("Photographs", "slideshow_step") |
972 | |
973 | # Implements MessageHandler interface |
974 | def handleMessage(self, message): |
975 | @@ -457,26 +222,99 @@ |
976 | """ |
977 | if message.get_type() == MessageType.CONTENT_CONF_UPDATED: |
978 | self.update_configuration() |
979 | - elif message.get_type() == MessageType.PREFERENCES_CONF_UPDATED: |
980 | - self.update_configuration() |
981 | - |
982 | - def get_cfg_dir(self): |
983 | - """ |
984 | - Get the entertainer configuration dir. |
985 | - @return: strings |
986 | - """ |
987 | - return self.cfg_dir |
988 | |
989 | def _is_valid_media_folder(self, folder_list): |
990 | """Return a folder list where eventual cache folders are removed""" |
991 | - cache_dir = os.path.join(self.get_cfg_dir(), 'cache') |
992 | valid_folder_list = [] |
993 | |
994 | for folder in folder_list: |
995 | - common_prefix = os.path.commonprefix([cache_dir, folder]) |
996 | - if common_prefix != cache_dir: |
997 | - # folder is not a subfolder of cache_dir we accept it |
998 | + common_prefix = os.path.commonprefix([self.cache_dir, folder]) |
999 | + if common_prefix != self.cache_dir: |
1000 | + # if folder is not a subfolder of cache_dir, we accept it |
1001 | valid_folder_list.append(folder) |
1002 | |
1003 | return valid_folder_list |
1004 | |
1005 | + |
1006 | +class Resources(object): |
1007 | + '''A Wrapper for the XDG directories. Also handles creation of a new setup |
1008 | + if the Entertainer directories within the XDG directories are missing. This |
1009 | + class is meant solely to support Configuration and should NOT be publicly |
1010 | + used because of testing conflicts that would occur.''' |
1011 | + |
1012 | + def __init__(self, resource='entertainer', config_testing_dir=None): |
1013 | + if config_testing_dir is None: |
1014 | + self.cache_dir = os.path.join(BaseDirectory.xdg_cache_home, |
1015 | + resource) |
1016 | + self.config_dir = os.path.join(BaseDirectory.xdg_config_home, |
1017 | + resource) |
1018 | + self.data_dir = os.path.join(BaseDirectory.xdg_data_home, resource) |
1019 | + else: |
1020 | + # Running in the test suite so don't create the XDG locations. |
1021 | + self.cache_dir = os.path.join(config_testing_dir, 'cache') |
1022 | + self.config_dir = os.path.join(config_testing_dir, 'config') |
1023 | + self.data_dir = os.path.join(config_testing_dir, 'data') |
1024 | + |
1025 | + # Ensure that the directories exist. |
1026 | + if not os.path.exists(self.cache_dir): |
1027 | + self.create_cache_hierarchy() |
1028 | + if not os.path.exists(self.config_dir): |
1029 | + self.create_configuration() |
1030 | + if not os.path.exists(self.data_dir): |
1031 | + self.create_initial_data() |
1032 | + |
1033 | + def create_cache_hierarchy(self): |
1034 | + '''Create the cache hierarchy that is assumed to exist.''' |
1035 | + os.makedirs(os.path.join(self.cache_dir, 'album_art')) |
1036 | + os.makedirs(os.path.join(self.cache_dir, 'movie_art')) |
1037 | + os.makedirs(os.path.join(self.cache_dir, 'thumbnails', 'image')) |
1038 | + os.makedirs(os.path.join(self.cache_dir, 'thumbnails', 'video')) |
1039 | + |
1040 | + def create_configuration(self): |
1041 | + '''Create the user's configuration area and populate with the default |
1042 | + content configuration.''' |
1043 | + |
1044 | + # Copy configuration data from a dev branch if we can |
1045 | + dev_config = os.path.abspath(os.path.dirname(__file__) + '/../cfg') |
1046 | + if os.path.exists(dev_config): |
1047 | + shutil.copytree(dev_config, self.config_dir) |
1048 | + return |
1049 | + |
1050 | + # Must be a proper installation so install from the system location. |
1051 | + installed_config = os.path.join(self.installed_data_dir, 'cfg') |
1052 | + shutil.copytree(installed_config, self.config_dir) |
1053 | + |
1054 | + def create_initial_data(self): |
1055 | + '''Create the initial data directory and populate with the default data |
1056 | + used by Entertainer.''' |
1057 | + os.mkdir(self.data_dir) |
1058 | + |
1059 | + # Copy configuration data from a dev branch if we can |
1060 | + dev_config = os.path.abspath(os.path.dirname(__file__) + '/../themes') |
1061 | + if os.path.exists(dev_config): |
1062 | + shutil.copytree(dev_config, os.path.join(self.data_dir, 'themes')) |
1063 | + return |
1064 | + |
1065 | + # Must be a proper installation so install from the system location. |
1066 | + themes_dir = os.path.join(self.installed_data_dir, 'themes') |
1067 | + shutil.copytree(themes_dir, os.path.join(self.data_dir, 'themes')) |
1068 | + |
1069 | + @property |
1070 | + def installed_data_dir(self): |
1071 | + '''Since different distros decide on the install path differently, scan |
1072 | + through the system data directories to find where Entertainer was |
1073 | + installed.''' |
1074 | + |
1075 | + # Get rid of the user's home data directory because we don't want it. |
1076 | + system_data_dirs = [data_dir for data_dir in BaseDirectory.xdg_data_dirs |
1077 | + if not data_dir.startswith(BaseDirectory.xdg_data_home)] |
1078 | + |
1079 | + installed_data_dir = None |
1080 | + for directory in system_data_dirs: |
1081 | + possible_data_dir = os.path.join(directory, 'entertainer') |
1082 | + if os.path.exists(possible_data_dir): |
1083 | + installed_data_dir = possible_data_dir |
1084 | + break |
1085 | + |
1086 | + return installed_data_dir |
1087 | + |
1088 | |
1089 | === modified file 'entertainerlib/dialog.py' |
1090 | --- entertainerlib/dialog.py 2009-07-14 04:24:07 +0000 |
1091 | +++ entertainerlib/dialog.py 2009-08-27 03:18:41 +0000 |
1092 | @@ -22,7 +22,7 @@ |
1093 | from entertainerlib.weather import Weather |
1094 | |
1095 | |
1096 | -class ContentManagementDialog: |
1097 | +class ManagerDialog: |
1098 | """ |
1099 | This is a content management tool for Entertainer media center application. |
1100 | """ |
1101 | @@ -39,44 +39,38 @@ |
1102 | """ |
1103 | self.stand_alone = stand_alone |
1104 | self.config = Configuration() |
1105 | + self.themes = [] |
1106 | self.weather = Weather() |
1107 | |
1108 | # Load glade UI |
1109 | - self.gladefile = os.path.join(self.GLADE_DIR, |
1110 | - "entertainer-content-management.glade") |
1111 | + self.gladefile = os.path.join(self.GLADE_DIR, 'manager.glade') |
1112 | self.widgets = gtk.glade.XML(self.gladefile) |
1113 | |
1114 | # Get content management dialog and bind signal callbacks |
1115 | - self.dialog = self.widgets.get_widget("ContentManagementDialog") |
1116 | + self.dialog = self.widgets.get_widget("ManagerDialog") |
1117 | if (self.dialog): |
1118 | callback_dic = { |
1119 | + # Dialog-wide callbacks |
1120 | "on_button_open_list_clicked" : |
1121 | self.on_button_open_list_clicked, |
1122 | "on_close_button_clicked" : self.on_close_button_clicked, |
1123 | - "on_button_remove_videos_clicked" : |
1124 | - self.on_button_remove_videos_clicked, |
1125 | - "on_button_add_videos_clicked" : |
1126 | - self.on_button_add_videos_clicked, |
1127 | - "on_button_edit_videos_clicked" : |
1128 | - self.on_button_edit_videos_clicked, |
1129 | + "on_ManagerDialog_destroy" : self.on_dialog_closed, |
1130 | + |
1131 | + # Media tab |
1132 | + "on_button_remove_media_clicked" : |
1133 | + self.on_button_remove_media_clicked, |
1134 | + "on_button_add_media_clicked" : |
1135 | + self.on_button_add_media_clicked, |
1136 | + "on_button_edit_media_clicked" : |
1137 | + self.on_button_edit_media_clicked, |
1138 | "on_checkbutton_video_metadata_toggled" : |
1139 | self.on_checkbutton_video_metadata_toggled, |
1140 | - "on_button_add_music_clicked" : |
1141 | - self.on_button_add_music_clicked, |
1142 | - "on_button_remove_music_clicked" : |
1143 | - self.on_button_remove_music_clicked, |
1144 | - "on_button_edit_music_clicked" : |
1145 | - self.on_button_edit_music_clicked, |
1146 | "on_lyrics_checkbox_toggled" : self.on_lyrics_checkbox_toggled, |
1147 | "on_art_checkbox_toggled" : self.on_art_checkbox_toggled, |
1148 | - "on_button_add_images_clicked" : |
1149 | - self.on_button_add_images_clicked, |
1150 | - "on_button_remove_images_clicked" : |
1151 | - self.on_button_remove_images_clicked, |
1152 | - "on_button_edit_images_clicked" : |
1153 | - self.on_button_edit_images_clicked, |
1154 | - "on_hidden_files_folders_checkbox_toggled" : |
1155 | - self.on_hidden_files_folders_checkbox_toggled, |
1156 | + "on_button_media_rebuild_clicked" : |
1157 | + self.on_button_media_rebuild_clicked, |
1158 | + |
1159 | + # Feed tab |
1160 | "on_button_add_feed_clicked" : |
1161 | self.on_button_add_feed_clicked, |
1162 | "on_button_remove_feed_clicked" : |
1163 | @@ -85,20 +79,15 @@ |
1164 | self.on_button_edit_feed_clicked, |
1165 | "on_fetch_interval_spinbutton_value_changed" : |
1166 | self.on_fetch_interval_spinbutton_value_changed, |
1167 | - "on_ContentManagementDialog_destroy" : self.on_dialog_closed, |
1168 | "on_url_dialog_delete_event" : self.on_url_dialog_delete_event, |
1169 | "on_url_dialog_ok_button_clicked" : |
1170 | self.on_url_dialog_ok_button_clicked, |
1171 | "on_url_dialog_cancel_button_clicked" : |
1172 | self.on_url_dialog_cancel_button_clicked, |
1173 | - "on_button_video_rebuild_clicked" : |
1174 | - self.on_button_video_rebuild_clicked, |
1175 | - "on_button_music_rebuild_clicked" : |
1176 | - self.on_button_music_rebuild_clicked, |
1177 | - "on_button_image_rebuild_clicked" : |
1178 | - self.on_button_image_rebuild_clicked, |
1179 | "on_button_feed_rebuild_clicked" : |
1180 | self.on_button_feed_rebuild_clicked, |
1181 | + |
1182 | + # Weather tab |
1183 | "on_button_add_weather_clicked" : |
1184 | self.on_button_add_weather_clicked, |
1185 | "on_button_remove_weather_clicked" : |
1186 | @@ -111,7 +100,31 @@ |
1187 | self.on_location_cancel_button_clicked, |
1188 | "on_location_add_button_clicked" : |
1189 | self.on_location_add_button_clicked, |
1190 | - "on_location_entry_activate" : self.on_location_entry_activate} |
1191 | + "on_location_entry_activate" : self.on_location_entry_activate, |
1192 | + |
1193 | + # User Interface tab |
1194 | + "on_theme_list_cursor_changed" : |
1195 | + self.on_theme_list_cursor_changed, |
1196 | + "on_theme_add_button_clicked" : |
1197 | + self.on_theme_add_button_clicked, |
1198 | + "on_theme_remove_button_clicked" : |
1199 | + self.on_theme_remove_button_clicked, |
1200 | + "on_checkbutton_effects_toggled" : |
1201 | + self.on_checkbutton_effects_toggled, |
1202 | + "on_combobox_effects_changed" : |
1203 | + self.on_combobox_effects_changed, |
1204 | + |
1205 | + # General tab |
1206 | + "on_checkbutton_fullscreen_toggled" : |
1207 | + self.on_checkbutton_fullscreen_toggled, |
1208 | + "on_checkbutton_autostart_toggled" : |
1209 | + self.on_checkbutton_autostart_toggled, |
1210 | + "on_checkbutton_systray_icon_toggled" : |
1211 | + self.on_checkbutton_systray_icon_toggled, |
1212 | + "on_spinbutton_slideshow_step_value_changed": |
1213 | + self.on_spinbutton_slideshow_step_value_changed |
1214 | + } |
1215 | + |
1216 | self.widgets.signal_autoconnect(callback_dic) |
1217 | |
1218 | # Initialize dialog widgets with correct values and show dialog |
1219 | @@ -127,12 +140,10 @@ |
1220 | column = gtk.TreeViewColumn(_("Location"), cell_renderer, text=0) |
1221 | result_list.append_column(column) |
1222 | |
1223 | -# Signal handlers |
1224 | - |
1225 | def on_dialog_closed(self, widget): |
1226 | """Callback function for dialog's close button""" |
1227 | try: |
1228 | - proxy = MessageBusProxy(client_name = "Content Management GUI") |
1229 | + proxy = MessageBusProxy(client_name = "Manager GUI") |
1230 | proxy.connectToMessageBus() |
1231 | proxy.sendMessage(Message(MessageType.CONTENT_CONF_UPDATED)) |
1232 | proxy.disconnectFromMessageBus() |
1233 | @@ -146,7 +157,6 @@ |
1234 | error.run() |
1235 | error.destroy() |
1236 | |
1237 | - |
1238 | if(self.stand_alone): |
1239 | self.dialog.hide() |
1240 | self.dialog.destroy() |
1241 | @@ -165,12 +175,12 @@ |
1242 | self.dialog.hide() |
1243 | self.dialog.destroy() |
1244 | |
1245 | - def on_button_add_videos_clicked(self, widget): |
1246 | + def on_button_add_media_clicked(self, widget): |
1247 | """Opens add URL dialog. """ |
1248 | - widget = self.widgets.get_widget("treeview_videos") |
1249 | + widget = self.widgets.get_widget("treeview_media") |
1250 | model = widget.get_model() |
1251 | # Open "Select folder" dialog |
1252 | - dialog = gtk.FileChooserDialog(_("Select video folder"), None, |
1253 | + dialog = gtk.FileChooserDialog(_("Select folder"), None, |
1254 | gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, |
1255 | (gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL, |
1256 | gtk.STOCK_OPEN,gtk.RESPONSE_OK), |
1257 | @@ -179,25 +189,25 @@ |
1258 | # If folder was selected we add it to model and update config file |
1259 | if(status == gtk.RESPONSE_OK): |
1260 | self.add_to_model_and_config(dialog.get_current_folder(), model, |
1261 | - self.video_folders, "Videos") |
1262 | + self.media_folders, "Media") |
1263 | dialog.destroy() |
1264 | |
1265 | - def on_button_remove_videos_clicked(self, widget): |
1266 | - """Remove currently selected folder from video folders""" |
1267 | - widget = self.widgets.get_widget("treeview_videos") |
1268 | + def on_button_remove_media_clicked(self, widget): |
1269 | + """Remove currently selected folder from media folders""" |
1270 | + widget = self.widgets.get_widget("treeview_media") |
1271 | model = widget.get_model() |
1272 | selection = widget.get_selection().get_selected() |
1273 | if selection[1] == None: |
1274 | return |
1275 | rm_folder = model.get_value(selection[1], 0) |
1276 | - self.video_folders.remove(rm_folder) |
1277 | - str_folders = ";".join(self.video_folders) |
1278 | - self.config.write_content_value("Videos", "folders", str_folders) |
1279 | + self.media_folders.remove(rm_folder) |
1280 | + str_folders = ";".join(self.media_folders) |
1281 | + self.config.write_content_value("Media", "folders", str_folders) |
1282 | model.remove(selection[1]) |
1283 | |
1284 | - def on_button_edit_videos_clicked(self, widget): |
1285 | + def on_button_edit_media_clicked(self, widget): |
1286 | """Edit currently selected folder""" |
1287 | - widget = self.widgets.get_widget("treeview_videos") |
1288 | + widget = self.widgets.get_widget("treeview_media") |
1289 | url_dialog = self.widgets.get_widget("url_dialog") |
1290 | url_entry = self.widgets.get_widget("url_entry") |
1291 | model = widget.get_model() |
1292 | @@ -212,136 +222,36 @@ |
1293 | # Update list model |
1294 | model.set_value(selection[1], 0, self.url) |
1295 | # Update configure file |
1296 | - pos = self.video_folders.index(folder) |
1297 | - self.video_folders.remove(folder) |
1298 | - self.video_folders.insert(pos, self.url) |
1299 | - str_folders = ";".join(self.video_folders) |
1300 | - self.config.write_content_value("Videos", "folders", |
1301 | + pos = self.media_folders.index(folder) |
1302 | + self.media_folders.remove(folder) |
1303 | + self.media_folders.insert(pos, self.url) |
1304 | + str_folders = ";".join(self.media_folders) |
1305 | + self.config.write_content_value("Media", "folders", |
1306 | str_folders) |
1307 | |
1308 | + def on_checkbutton_autostart_toggled(self, widget): |
1309 | + '''Server autostart checkbox toggled.''' |
1310 | + self.config.write_content_value("General", "start_server_auto", |
1311 | + widget.get_active()) |
1312 | + |
1313 | + def on_checkbutton_fullscreen_toggled(self, widget): |
1314 | + '''Start in fullscreen checkbox toggled.''' |
1315 | + self.config.write_content_value("General", "start_in_fullscreen", |
1316 | + widget.get_active()) |
1317 | + |
1318 | + def on_checkbutton_systray_icon_toggled(self, widget): |
1319 | + """System Tray Icon checkbox toggled""" |
1320 | + self.config.write_content_value("General", "display_icon", |
1321 | + widget.get_active()) |
1322 | + |
1323 | def on_checkbutton_video_metadata_toggled(self, widget): |
1324 | """ |
1325 | Download video file metadata from internet |
1326 | @param widget: GTK-Widget |
1327 | """ |
1328 | - self.config.write_content_value("Videos", "download_metadata", |
1329 | + self.config.write_content_value("Media", "download_metadata", |
1330 | widget.get_active()) |
1331 | |
1332 | - def on_button_add_music_clicked(self, widget): |
1333 | - """ |
1334 | - Opens add URL dialog |
1335 | - @param widget: GTK-Widget |
1336 | - """ |
1337 | - widget = self.widgets.get_widget("treeview_music") |
1338 | - model = widget.get_model() |
1339 | - # Open "Select folder" dialog |
1340 | - dialog = gtk.FileChooserDialog(_("Select music folder"), None, |
1341 | - gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, |
1342 | - (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, |
1343 | - gtk.RESPONSE_OK), |
1344 | - None) |
1345 | - status = dialog.run() |
1346 | - # If folder was selected we add it to model and update config file |
1347 | - if(status == gtk.RESPONSE_OK): |
1348 | - self.add_to_model_and_config(dialog.get_current_folder(), model, |
1349 | - self.music_folders, "Music") |
1350 | - dialog.destroy() |
1351 | - |
1352 | - def on_button_remove_music_clicked(self, widget): |
1353 | - """Remove currently selected folder from music folders""" |
1354 | - widget = self.widgets.get_widget("treeview_music") |
1355 | - model = widget.get_model() |
1356 | - selection = widget.get_selection().get_selected() |
1357 | - if selection[1] == None: |
1358 | - return |
1359 | - rm_folder = model.get_value(selection[1], 0) |
1360 | - self.music_folders.remove(rm_folder) |
1361 | - str_folders = ";".join(self.music_folders) |
1362 | - self.config.write_content_value("Music", "folders", str_folders) |
1363 | - model.remove(selection[1]) |
1364 | - |
1365 | - def on_button_edit_music_clicked(self, widget): |
1366 | - """Edit currently selected music folder""" |
1367 | - widget = self.widgets.get_widget("treeview_music") |
1368 | - url_dialog = self.widgets.get_widget("url_dialog") |
1369 | - url_entry = self.widgets.get_widget("url_entry") |
1370 | - model = widget.get_model() |
1371 | - selection = widget.get_selection().get_selected() |
1372 | - if selection[1] == None: |
1373 | - return |
1374 | - folder = model.get_value(selection[1], 0) |
1375 | - url_entry.set_text(folder) |
1376 | - url_dialog.set_title(_("Edit URL")) |
1377 | - status = url_dialog.run() |
1378 | - if status == gtk.RESPONSE_OK and os.path.exists(self.url): |
1379 | - # Update list model |
1380 | - model.set_value(selection[1], 0, self.url) |
1381 | - # Update configure file |
1382 | - pos = self.music_folders.index(folder) |
1383 | - self.music_folders.remove(folder) |
1384 | - self.music_folders.insert(pos, self.url) |
1385 | - str_folders = ";".join(self.music_folders) |
1386 | - self.config.write_content_value("Music", "folders", str_folders) |
1387 | - |
1388 | - def on_button_add_images_clicked(self, widget): |
1389 | - """Opens add URL dialog. """ |
1390 | - widget = self.widgets.get_widget("treeview_images") |
1391 | - model = widget.get_model() |
1392 | - # Open "Select folder" dialog |
1393 | - dialog = gtk.FileChooserDialog(_("Select image folder"), None, |
1394 | - gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, |
1395 | - (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, |
1396 | - gtk.RESPONSE_OK), |
1397 | - None) |
1398 | - status = dialog.run() |
1399 | - # If folder was selected we add it to model and update config file |
1400 | - if(status == gtk.RESPONSE_OK): |
1401 | - self.add_to_model_and_config(dialog.get_current_folder(), model, |
1402 | - self.image_folders, "Images") |
1403 | - dialog.destroy() |
1404 | - |
1405 | - def on_button_remove_images_clicked(self, widget): |
1406 | - """Remove currently selected folder from images folders""" |
1407 | - widget = self.widgets.get_widget("treeview_images") |
1408 | - model = widget.get_model() |
1409 | - selection = widget.get_selection().get_selected() |
1410 | - if selection[1] == None: |
1411 | - return |
1412 | - rm_folder = model.get_value(selection[1], 0) |
1413 | - self.image_folders.remove(rm_folder) |
1414 | - str_folders = ";".join(self.image_folders) |
1415 | - self.config.write_content_value("Images", "folders", str_folders) |
1416 | - model.remove(selection[1]) |
1417 | - |
1418 | - def on_button_edit_images_clicked(self, widget): |
1419 | - """Edit currently selected music folder""" |
1420 | - widget = self.widgets.get_widget("treeview_images") |
1421 | - url_dialog = self.widgets.get_widget("url_dialog") |
1422 | - url_entry = self.widgets.get_widget("url_entry") |
1423 | - model = widget.get_model() |
1424 | - selection = widget.get_selection().get_selected() |
1425 | - if selection[1] == None: |
1426 | - return |
1427 | - folder = model.get_value(selection[1], 0) |
1428 | - url_entry.set_text(folder) |
1429 | - url_dialog.set_title(_("Edit URL")) |
1430 | - status = url_dialog.run() |
1431 | - if status == gtk.RESPONSE_OK and os.path.exists(self.url): |
1432 | - # Update list model |
1433 | - model.set_value(selection[1], 0, self.url) |
1434 | - # Update configure file |
1435 | - pos = self.image_folders.index(folder) |
1436 | - self.image_folders.remove(folder) |
1437 | - self.image_folders.insert(pos, self.url) |
1438 | - str_folders = ";".join(self.image_folders) |
1439 | - self.config.write_content_value("Images", "folders", |
1440 | - str_folders) |
1441 | - |
1442 | - def on_hidden_files_folders_checkbox_toggled(self, widget): |
1443 | - """If True hidden files and folders will be added to image library.""" |
1444 | - self.config.write_content_value("Images", |
1445 | - "display_hidden_files_folders", widget.get_active()) |
1446 | - |
1447 | def on_button_add_feed_clicked(self, widget): |
1448 | """Opens add feed dialog. """ |
1449 | widget = self.widgets.get_widget("treeview_feeds") |
1450 | @@ -405,12 +315,17 @@ |
1451 | self.config.write_content_value("RSS", "fetch_interval", |
1452 | widget.get_value_as_int()) |
1453 | |
1454 | + def on_spinbutton_slideshow_step_value_changed(self, widget): |
1455 | + """Activation of slideshow effects""" |
1456 | + self.config.write_content_value("Photographs", "slideshow_step", |
1457 | + int(widget.get_value())) |
1458 | + |
1459 | def on_lyrics_checkbox_toggled(self, widget): |
1460 | - self.config.write_content_value("Music", "download_lyrics", |
1461 | + self.config.write_content_value("Media", "download_lyrics", |
1462 | widget.get_active()) |
1463 | |
1464 | def on_art_checkbox_toggled(self, widget): |
1465 | - self.config.write_content_value("Music", "download_album_art", |
1466 | + self.config.write_content_value("Media", "download_album_art", |
1467 | widget.get_active()) |
1468 | |
1469 | def on_url_dialog_ok_button_clicked(self, widget): |
1470 | @@ -555,14 +470,13 @@ |
1471 | """ |
1472 | self.on_location_find_button_clicked(widget) |
1473 | |
1474 | - def on_button_video_rebuild_clicked(self, widget): |
1475 | - """ |
1476 | - Rebuild video cache requested |
1477 | - @param widget: GTK-Widget |
1478 | - """ |
1479 | + def on_button_media_rebuild_clicked(self, widget): |
1480 | + '''Rebuild media cache requested.''' |
1481 | try: |
1482 | - proxy = MessageBusProxy(client_name = "Content Management GUI") |
1483 | + proxy = MessageBusProxy(client_name = "Manager GUI") |
1484 | proxy.connectToMessageBus() |
1485 | + proxy.sendMessage(Message(MessageType.REBUILD_IMAGE_CACHE)) |
1486 | + proxy.sendMessage(Message(MessageType.REBUILD_MUSIC_CACHE)) |
1487 | proxy.sendMessage(Message(MessageType.REBUILD_VIDEO_CACHE)) |
1488 | proxy.disconnectFromMessageBus() |
1489 | except socket.error: |
1490 | @@ -575,46 +489,6 @@ |
1491 | error.run() |
1492 | error.destroy() |
1493 | |
1494 | - def on_button_music_rebuild_clicked(self, widget): |
1495 | - """ |
1496 | - Rebuild music cache requested |
1497 | - @param widget: GTK-Widget |
1498 | - """ |
1499 | - try: |
1500 | - proxy = MessageBusProxy(client_name = "Content Management GUI") |
1501 | - proxy.connectToMessageBus() |
1502 | - proxy.sendMessage(Message(MessageType.REBUILD_MUSIC_CACHE)) |
1503 | - proxy.disconnectFromMessageBus() |
1504 | - except socket.error: |
1505 | - error = gtk.MessageDialog( |
1506 | - None, gtk.DIALOG_MODAL, |
1507 | - gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, _( |
1508 | - "Entertainer backend is not running. " |
1509 | - "Cache cannot be rebuilt." |
1510 | - )) |
1511 | - error.run() |
1512 | - error.destroy() |
1513 | - |
1514 | - def on_button_image_rebuild_clicked(self, widget): |
1515 | - """ |
1516 | - Rebuild image cache requested |
1517 | - @param widget: GTK-Widget |
1518 | - """ |
1519 | - try: |
1520 | - proxy = MessageBusProxy(client_name = "Content Management GUI") |
1521 | - proxy.connectToMessageBus() |
1522 | - proxy.sendMessage(Message(MessageType.REBUILD_IMAGE_CACHE)) |
1523 | - proxy.disconnectFromMessageBus() |
1524 | - except socket.error: |
1525 | - error = gtk.MessageDialog( |
1526 | - None, gtk.DIALOG_MODAL, |
1527 | - gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, _( |
1528 | - "Entertainer backend is not running. " |
1529 | - "Cache cannot be rebuilt." |
1530 | - )) |
1531 | - error.run() |
1532 | - error.destroy() |
1533 | - |
1534 | def on_button_feed_rebuild_clicked(self, widget): |
1535 | """ |
1536 | Rebuild feed cache requested |
1537 | @@ -628,7 +502,7 @@ |
1538 | #If user has ok'd the request send the message to the message bus |
1539 | if(status == gtk.RESPONSE_OK): |
1540 | try: |
1541 | - proxy = MessageBusProxy(client_name = "Content Management GUI") |
1542 | + proxy = MessageBusProxy(client_name = "Manager GUI") |
1543 | proxy.connectToMessageBus() |
1544 | proxy.sendMessage(Message(MessageType.REBUILD_FEED_CACHE)) |
1545 | proxy.disconnectFromMessageBus() |
1546 | @@ -644,73 +518,141 @@ |
1547 | |
1548 | dialog.destroy() |
1549 | |
1550 | + def on_theme_add_button_clicked(self, widget): |
1551 | + """Add theme button clicked""" |
1552 | + themelist = self.widgets.get_widget("theme_list") |
1553 | + model = themelist.get_model() |
1554 | + # Open "Select folder" dialog |
1555 | + dialog = gtk.FileChooserDialog(_("Select theme package file"), |
1556 | + None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, |
1557 | + gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK), None) |
1558 | + file_filter = gtk.FileFilter() |
1559 | + file_filter.set_name(_("Theme package (tar.gz)")) |
1560 | + file_filter.add_pattern("*.tar.gz") |
1561 | + dialog.add_filter(file_filter) |
1562 | + status = dialog.run() |
1563 | + |
1564 | + # If theme was selected with file chooser |
1565 | + if(status == gtk.RESPONSE_OK): |
1566 | + package = dialog.get_filename() |
1567 | + tar = tarfile.open(package, 'r:gz') # Open tar.gz package |
1568 | + |
1569 | + # Make sure that package contains configuration file (is theme) |
1570 | + content = tar.getnames() |
1571 | + theme_name = None |
1572 | + is_theme = False |
1573 | + for element in content: |
1574 | + if element[-10:] == "theme.conf": |
1575 | + theme_name = element[:-11] |
1576 | + is_theme = True |
1577 | + |
1578 | + # Install them |
1579 | + if is_theme: |
1580 | + tar.extractall(os.path.join(self.config.data_dir, 'themes')) |
1581 | + model.insert(len(model), [theme_name]) |
1582 | + else: |
1583 | + error = gtk.MessageDialog(None, gtk.DIALOG_MODAL, |
1584 | + gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, _("Invalid theme file!")) |
1585 | + error.run() |
1586 | + error.destroy() |
1587 | + |
1588 | + dialog.destroy() |
1589 | + |
1590 | + def on_theme_list_cursor_changed(self, widget): |
1591 | + """Executed when theme is changed in theme list. Update preview.""" |
1592 | + # Get currently selected theme |
1593 | + themelist = self.widgets.get_widget("theme_list") |
1594 | + model = themelist.get_model() |
1595 | + selection = themelist.get_selection().get_selected() |
1596 | + name = model.get_value(selection[1], 0) |
1597 | + themedir = os.path.join(self.config.data_dir, 'themes', name) |
1598 | + theme = Theme(theme_path=themedir) |
1599 | + |
1600 | + # Update preview |
1601 | + image = self.widgets.get_widget("theme_image") |
1602 | + image.set_from_file(os.path.join(themedir, "thumbnail.png")) |
1603 | + name = self.widgets.get_widget("name_label") |
1604 | + name.set_text(theme.getName()) |
1605 | + author = self.widgets.get_widget("author_label") |
1606 | + author.set_text(theme.getAuthor()) |
1607 | + license_label = self.widgets.get_widget("license_label") |
1608 | + license_label.set_text(theme.getLicence()) |
1609 | + copyright_label = self.widgets.get_widget("copyright_label") |
1610 | + copyright_label.set_text(theme.getCopyright()) |
1611 | + comment = self.widgets.get_widget("comment_label") |
1612 | + comment.set_text(theme.getComment()) |
1613 | + |
1614 | + self.config.write_content_value("General", "theme", name.get_text()) |
1615 | + |
1616 | + def on_theme_remove_button_clicked(self, widget): |
1617 | + """Remove theme button clicked""" |
1618 | + # Get currently selected theme |
1619 | + themelist = self.widgets.get_widget("theme_list") |
1620 | + model = themelist.get_model() |
1621 | + selection = themelist.get_selection().get_selected() |
1622 | + name = model.get_value(selection[1], 0) |
1623 | + |
1624 | + confirm = gtk.MessageDialog(None, |
1625 | + gtk.DIALOG_MODAL, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, |
1626 | + _("Are you sure you want to delete\ntheme: %(name)s") % \ |
1627 | + {'name': name}) |
1628 | + status = confirm.run() |
1629 | + confirm.destroy() |
1630 | + if(status == gtk.RESPONSE_YES): |
1631 | + themedir = os.path.join(self.config.data_dir, 'themes', name) |
1632 | + shutil.rmtree(themedir) |
1633 | + model.remove(selection[1]) |
1634 | + themelist.set_cursor(0) |
1635 | + self.themes.remove(name) |
1636 | + |
1637 | + def on_checkbutton_effects_toggled(self, widget): |
1638 | + """Effect checkbox toggled""" |
1639 | + combobox = self.widgets.get_widget("combobox_effects") |
1640 | + combobox.set_sensitive(widget.get_active()) |
1641 | + self.config.write_content_value("General", "show_effects", |
1642 | + widget.get_active()) |
1643 | + |
1644 | + def on_combobox_effects_changed(self, widget): |
1645 | + """User changed effect for screen transitions""" |
1646 | + text = widget.get_active_text() |
1647 | + if text == _("No effect"): |
1648 | + english_text = "No effect" |
1649 | + if text == _("Crossfade"): |
1650 | + english_text = "Crossfade" |
1651 | + if text == _("Zoom and fade"): |
1652 | + english_text = "Zoom and fade" |
1653 | + if text == _("Slide"): |
1654 | + english_text = "Slide" |
1655 | + self.config.write_content_value("General", "transition_effect", |
1656 | + english_text) |
1657 | + |
1658 | def init_dialog_values_from_configure_file(self): |
1659 | """Read configuration and set dialog widget values with read values. |
1660 | """ |
1661 | # == Videos == |
1662 | - videolist_widget = self.widgets.get_widget("treeview_videos") |
1663 | - videostore = gtk.ListStore(str) |
1664 | + medialist_widget = self.widgets.get_widget("treeview_media") |
1665 | + mediastore = gtk.ListStore(str) |
1666 | |
1667 | cell_renderer = gtk.CellRendererText() |
1668 | column = gtk.TreeViewColumn(_("Folders"), cell_renderer, text=0) |
1669 | - videolist_widget.append_column(column) |
1670 | + medialist_widget.append_column(column) |
1671 | |
1672 | - self.video_folders = self.config.get_video_folders() |
1673 | + self.media_folders = self.config.media_folders |
1674 | |
1675 | # Fill model with folders read from config file |
1676 | - self.init_model(videostore, self.video_folders) |
1677 | + self.init_model(mediastore, self.media_folders) |
1678 | |
1679 | - videolist_widget.set_model(videostore) |
1680 | + medialist_widget.set_model(mediastore) |
1681 | |
1682 | # Checkboxes |
1683 | metadata_checkbox = self.widgets.get_widget("video_metadata_checkbox") |
1684 | - md_val = self.config.download_video_metadata() |
1685 | - metadata_checkbox.set_active(md_val) |
1686 | - |
1687 | - # == Music == |
1688 | - musiclist_widget = self.widgets.get_widget("treeview_music") |
1689 | - music_model = gtk.ListStore(str) |
1690 | - |
1691 | - music_cell = gtk.CellRendererText() |
1692 | - music_column = gtk.TreeViewColumn(_("Folders"), music_cell, text=0) |
1693 | - musiclist_widget.append_column(music_column) |
1694 | - |
1695 | - self.music_folders = self.config.get_music_folders() |
1696 | - |
1697 | - # Fill model with folders read from config file |
1698 | - self.init_model(music_model, self.music_folders) |
1699 | - |
1700 | - musiclist_widget.set_model(music_model) |
1701 | - |
1702 | - # Checkboxes |
1703 | + metadata_checkbox.set_active(self.config.download_metadata) |
1704 | + |
1705 | art_checkbox = self.widgets.get_widget("art_checkbox") |
1706 | - art_val = self.config.download_album_art() |
1707 | - art_checkbox.set_active(art_val) |
1708 | + art_checkbox.set_active(self.config.download_album_art) |
1709 | |
1710 | lyrics_checkbox = self.widgets.get_widget("lyrics_checkbox") |
1711 | - lyrics_val = self.config.download_lyrics() |
1712 | - lyrics_checkbox.set_active(lyrics_val) |
1713 | - |
1714 | - # == Images == |
1715 | - imagelist_widget = self.widgets.get_widget("treeview_images") |
1716 | - images_model = gtk.ListStore(str) |
1717 | - |
1718 | - img_cell = gtk.CellRendererText() |
1719 | - img_column = gtk.TreeViewColumn(_("Folders"), img_cell, text=0) |
1720 | - imagelist_widget.append_column(img_column) |
1721 | - |
1722 | - self.image_folders = self.config.get_image_folders() |
1723 | - |
1724 | - # Fill model with folders read from config file |
1725 | - self.init_model(images_model, self.image_folders) |
1726 | - |
1727 | - imagelist_widget.set_model(images_model) |
1728 | - |
1729 | - # Checkboxes |
1730 | - hidden_checkbox = self.widgets.get_widget( |
1731 | - "hidden_files_folders_checkbox") |
1732 | - hidden_val = self.config.display_hidden_files_folders() |
1733 | - hidden_checkbox.set_active(hidden_val) |
1734 | + lyrics_checkbox.set_active(self.config.download_lyrics) |
1735 | |
1736 | # == RSS-feeds == |
1737 | feedlist_widget = self.widgets.get_widget("treeview_feeds") |
1738 | @@ -720,7 +662,7 @@ |
1739 | rss_column = gtk.TreeViewColumn(_("Feeds"), rss_cell, text=0) |
1740 | feedlist_widget.append_column(rss_column) |
1741 | |
1742 | - self.feeds = self.config.get_feeds() |
1743 | + self.feeds = self.config.feeds |
1744 | |
1745 | # Fill model with folders read from config file |
1746 | for i in range(len(self.feeds)): |
1747 | @@ -730,14 +672,14 @@ |
1748 | |
1749 | # Interval spinner |
1750 | interval_spinner = self.widgets.get_widget("fetch_interval_spinbutton") |
1751 | - interval_val = self.config.get_feed_fetch_interval() |
1752 | + interval_val = self.config.feed_fetch_interval |
1753 | if interval_val < 15: |
1754 | interval_val = 15 |
1755 | elif interval_val > 900: |
1756 | interval_val = 900 |
1757 | interval_spinner.set_value(interval_val) |
1758 | |
1759 | - # == Weather location == |
1760 | + # == Weather == |
1761 | locationlist_widget = self.widgets.get_widget("treeview_locations") |
1762 | location_model = gtk.ListStore(str) |
1763 | |
1764 | @@ -745,17 +687,15 @@ |
1765 | location_column = gtk.TreeViewColumn(_("Location"), loc_cell, text=0) |
1766 | locationlist_widget.append_column(location_column) |
1767 | |
1768 | - self.weather_location = self.config.get_weather_location() |
1769 | + self.weather_location = self.config.weather_location |
1770 | |
1771 | # Fill model with location read from config file |
1772 | location_model.insert(0, [self.weather_location]) |
1773 | - |
1774 | locationlist_widget.set_model(location_model) |
1775 | |
1776 | - # Checkboxes |
1777 | weather_display_checkbox = self.widgets.get_widget( |
1778 | "weather_display_checkbox") |
1779 | - display_val = self.config.display_weather_in_client() |
1780 | + display_val = self.config.display_weather_in_client |
1781 | weather_display_checkbox.set_active(display_val) |
1782 | if not display_val: |
1783 | self.widgets.get_widget("button_add_weather").set_sensitive(False) |
1784 | @@ -763,6 +703,80 @@ |
1785 | False) |
1786 | self.widgets.get_widget("treeview_locations").set_sensitive(False) |
1787 | |
1788 | + # == User Interface == |
1789 | + self.load_themes() |
1790 | + current_theme = self.config.theme_name |
1791 | + |
1792 | + themelist_widget = self.widgets.get_widget("theme_list") |
1793 | + model = gtk.ListStore(str) |
1794 | + |
1795 | + cell_renderer = gtk.CellRendererText() |
1796 | + column = gtk.TreeViewColumn("Themes", cell_renderer, text=0) |
1797 | + themelist_widget.append_column(column) |
1798 | + |
1799 | + # Fill model with installed themes |
1800 | + for i in range(len(self.themes)): |
1801 | + model.insert(i, [self.themes[i]]) |
1802 | + |
1803 | + themelist_widget.set_model(model) |
1804 | + |
1805 | + # Set current theme selected in theme list |
1806 | + index = model.get_iter_first() |
1807 | + unselected = True |
1808 | + index_counter = 0 |
1809 | + while(unselected): |
1810 | + name = model.get_value(index, 0) |
1811 | + if name == current_theme: |
1812 | + unselected = False |
1813 | + themelist_widget.set_cursor(index_counter) |
1814 | + index = model.iter_next(index) |
1815 | + index_counter += 1 |
1816 | + |
1817 | + effect_checkbox = self.widgets.get_widget("checkbutton_effects") |
1818 | + effect_combobox = self.widgets.get_widget("combobox_effects") |
1819 | + if self.config.show_effects: |
1820 | + effect_checkbox.set_active(True) |
1821 | + effect_combobox.set_sensitive(True) |
1822 | + else: |
1823 | + effect_checkbox.set_active(False) |
1824 | + effect_combobox.set_sensitive(False) |
1825 | + |
1826 | + # Set Effect Combobox value (Text values are set in glade file) |
1827 | + effect = self.config.transition_effect |
1828 | + if effect == "No effect": |
1829 | + effect_combobox.set_active(0) |
1830 | + if effect == "Crossfade": |
1831 | + effect_combobox.set_active(1) |
1832 | + if effect == "Zoom and fade": |
1833 | + effect_combobox.set_active(2) |
1834 | + if effect == "Slide": |
1835 | + effect_combobox.set_active(3) |
1836 | + |
1837 | + # == General == |
1838 | + checkbutton_fullscreen = self.widgets.get_widget( |
1839 | + "checkbutton_fullscreen") |
1840 | + if self.config.start_in_fullscreen: |
1841 | + checkbutton_fullscreen.set_active(True) |
1842 | + else: |
1843 | + checkbutton_fullscreen.set_active(False) |
1844 | + |
1845 | + checkbutton_autostart = self.widgets.get_widget("checkbutton_autostart") |
1846 | + if self.config.start_auto_server: |
1847 | + checkbutton_autostart.set_active(True) |
1848 | + else: |
1849 | + checkbutton_autostart.set_active(False) |
1850 | + |
1851 | + checkbutton_systray_icon = self.widgets.get_widget( |
1852 | + "checkbutton_systray_icon") |
1853 | + if self.config.tray_icon_enabled: |
1854 | + checkbutton_systray_icon.set_active(True) |
1855 | + else: |
1856 | + checkbutton_systray_icon.set_active(False) |
1857 | + |
1858 | + spinbutton_slideshow_step = self.widgets.get_widget( |
1859 | + "spinbutton_slideshow_step") |
1860 | + spinbutton_slideshow_step.set_value(self.config.slideshow_step) |
1861 | + |
1862 | def add_to_model_and_config(self, selected_folder, model, folders, kind): |
1863 | """ |
1864 | Add selected_folder to the model and the folders list while updating |
1865 | @@ -787,6 +801,14 @@ |
1866 | if not str(items[i]).strip() == "": |
1867 | model.insert(i, [items[i]]) |
1868 | |
1869 | + def load_themes(self): |
1870 | + """Load themes""" |
1871 | + themes = os.listdir(os.path.join(self.config.data_dir, 'themes')) |
1872 | + for element in themes: |
1873 | + theme = os.path.join(self.config.data_dir, 'themes', element) |
1874 | + if os.path.isdir(theme): |
1875 | + self.themes.append(element) |
1876 | + |
1877 | |
1878 | class LogViewer: |
1879 | """ |
1880 | @@ -814,7 +836,7 @@ |
1881 | gladefile = os.path.join(GLADE_DIR, "log_dialog.glade") |
1882 | |
1883 | def __init__(self, stand_alone): |
1884 | - self.logfile_entertainer = Configuration().ENTERTAINER_LOG |
1885 | + self.logfile_entertainer = Configuration().LOG |
1886 | self.logger = Logger().getLogger('utils.log_viewer') |
1887 | |
1888 | self.__STAND_ALONE = stand_alone |
1889 | @@ -1086,300 +1108,3 @@ |
1890 | return True |
1891 | |
1892 | |
1893 | -class PreferencesDialog: |
1894 | - """This is a preferences editing tool for Entertainer media center.""" |
1895 | - |
1896 | - # Glade file location |
1897 | - GLADE_DIR = os.path.join(os.path.dirname(__file__), "glade") |
1898 | - |
1899 | - def __init__(self, stand_alone): |
1900 | - """ |
1901 | - Initialize Preferenced dialog |
1902 | - @param stand_alone: Is this dialog stand alone process or part of |
1903 | - client |
1904 | - """ |
1905 | - # Is this dialog running as a stand alone process |
1906 | - self.STAND_ALONE = stand_alone |
1907 | - self.themes = [] |
1908 | - self.config = Configuration() |
1909 | - |
1910 | - # Load glade UI |
1911 | - self.gladefile = os.path.join(self.GLADE_DIR, |
1912 | - "entertainer-preferences.glade") |
1913 | - self.widgets = gtk.glade.XML(self.gladefile) |
1914 | - |
1915 | - # Get preferences dialog and bind signal callbacks |
1916 | - self.pref_dialog = self.widgets.get_widget("PreferencesDialog") |
1917 | - if (self.pref_dialog): |
1918 | - callback_dic = { |
1919 | - "on_close_button_clicked" : self.on_close_button_clicked, |
1920 | - "on_PreferencesDialog_delete_event" : self.on_dialog_closed, |
1921 | - "on_theme_list_cursor_changed" : |
1922 | - self.on_theme_list_cursor_changed, |
1923 | - "on_checkbutton_autostart_toggled" : |
1924 | - self.on_checkbutton_autostart_toggled, |
1925 | - "on_checkbutton_fullscreen_toggled" : |
1926 | - self.on_checkbutton_fullscreen_toggled, |
1927 | - "on_checkbutton_systray_icon_toggled" : |
1928 | - self.on_checkbutton_systray_icon_toggled, |
1929 | - "on_effect_checkbox_toggled" : self.on_effect_checkbox_toggled, |
1930 | - "on_effect_combobox_changed" : self.on_effect_combobox_changed, |
1931 | - "on_add_button_clicked" : self.on_add_button_clicked, |
1932 | - "on_remove_button_clicked" : self.on_remove_button_clicked, |
1933 | - "on_spinbutton_slideshow_step_value_changed": |
1934 | - self.on_spinbutton_slideshow_step_value_changed |
1935 | - } |
1936 | - self.widgets.signal_autoconnect(callback_dic) |
1937 | - |
1938 | - # Initilize dialog widgets with correct values and show dialog |
1939 | - self.init_dialog_values_from_configure_file() |
1940 | - #self.pref_dialog.resize(500,400) |
1941 | - self.pref_dialog.show() |
1942 | - |
1943 | - def load_themes(self): |
1944 | - """Load themes""" |
1945 | - themes = os.listdir(os.path.join(self.config.get_cfg_dir(), 'themes')) |
1946 | - for element in themes: |
1947 | - theme = os.path.join(self.config.get_cfg_dir(), 'themes', element) |
1948 | - if os.path.isdir(theme): |
1949 | - self.themes.append(element) |
1950 | - |
1951 | - def on_add_button_clicked(self, widget): |
1952 | - """Add theme button clicked""" |
1953 | - themelist = self.widgets.get_widget("theme_list") |
1954 | - model = themelist.get_model() |
1955 | - # Open "Select folder" dialog |
1956 | - dialog = gtk.FileChooserDialog(_("Select theme package file"), |
1957 | - None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, |
1958 | - gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK), None) |
1959 | - file_filter = gtk.FileFilter() |
1960 | - file_filter.set_name(_("Theme package (tar.gz)")) |
1961 | - file_filter.add_pattern("*.tar.gz") |
1962 | - dialog.add_filter(file_filter) |
1963 | - status = dialog.run() |
1964 | - |
1965 | - # If theme was selected with file chooser |
1966 | - if(status == gtk.RESPONSE_OK): |
1967 | - package = dialog.get_filename() |
1968 | - tar = tarfile.open(package, 'r:gz') # Open tar.gz package |
1969 | - |
1970 | - # Make sure that package contains configuration file (is theme) |
1971 | - content = tar.getnames() |
1972 | - theme_name = None |
1973 | - is_theme = False |
1974 | - for element in content: |
1975 | - if element[-10:] == "theme.conf": |
1976 | - theme_name = element[:-11] |
1977 | - is_theme = True |
1978 | - |
1979 | - # Install them |
1980 | - if is_theme: |
1981 | - tar.extractall(os.path.join(self.config.get_cfg_dir(), |
1982 | - 'themes')) |
1983 | - model.insert(len(model), [theme_name]) |
1984 | - else: |
1985 | - error = gtk.MessageDialog(None, gtk.DIALOG_MODAL, |
1986 | - gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, _("Invalid theme file!")) |
1987 | - error.run() |
1988 | - error.destroy() |
1989 | - |
1990 | - dialog.destroy() |
1991 | - |
1992 | - def on_remove_button_clicked(self, widget): |
1993 | - """Remove theme button clicked""" |
1994 | - # Get currently selected theme |
1995 | - themelist = self.widgets.get_widget("theme_list") |
1996 | - model = themelist.get_model() |
1997 | - selection = themelist.get_selection().get_selected() |
1998 | - name = model.get_value(selection[1], 0) |
1999 | - |
2000 | - confirm = gtk.MessageDialog(None, |
2001 | - gtk.DIALOG_MODAL, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, |
2002 | - _("Are you sure you want to delete\ntheme: %(name)s") % \ |
2003 | - {'name': name}) |
2004 | - status = confirm.run() |
2005 | - confirm.destroy() |
2006 | - if(status == gtk.RESPONSE_YES): |
2007 | - themedir = os.path.join(self.config.get_cfg_dir(), 'themes', name) |
2008 | - shutil.rmtree(themedir) |
2009 | - model.remove(selection[1]) |
2010 | - themelist.set_cursor(0) |
2011 | - self.themes.remove(name) |
2012 | - |
2013 | - def on_theme_list_cursor_changed(self, widget): |
2014 | - """Executed when theme is changed in theme list. Update preview.""" |
2015 | - # Get currently selected theme |
2016 | - themelist = self.widgets.get_widget("theme_list") |
2017 | - model = themelist.get_model() |
2018 | - selection = themelist.get_selection().get_selected() |
2019 | - name = model.get_value(selection[1], 0) |
2020 | - themedir = os.path.join(self.config.get_cfg_dir(), 'themes', name) |
2021 | - theme = Theme(theme_path=themedir) |
2022 | - |
2023 | - # Update preview |
2024 | - image = self.widgets.get_widget("theme_image") |
2025 | - image.set_from_file(os.path.join(themedir, "thumbnail.png")) |
2026 | - name = self.widgets.get_widget("name_label") |
2027 | - name.set_text(theme.getName()) |
2028 | - author = self.widgets.get_widget("author_label") |
2029 | - author.set_text(theme.getAuthor()) |
2030 | - licence = self.widgets.get_widget("licence_label") |
2031 | - licence.set_text(theme.getLicence()) |
2032 | - copyright_label = self.widgets.get_widget("copyright_label") |
2033 | - copyright_label.set_text(theme.getCopyright()) |
2034 | - comment = self.widgets.get_widget("comment_label") |
2035 | - comment.set_text(theme.getComment()) |
2036 | - |
2037 | - self.config.write_preference_value("General", "theme", name.get_text()) |
2038 | - |
2039 | - def on_checkbutton_autostart_toggled(self, widget): |
2040 | - """Server Autostart checkbox toggled""" |
2041 | - self.config.write_preference_value("General", "start_server_auto", |
2042 | - widget.get_active()) |
2043 | - |
2044 | - def on_checkbutton_fullscreen_toggled(self, widget): |
2045 | - """Start in fullscreen checkbox toggled""" |
2046 | - self.config.write_preference_value("General", "start_in_fullscreen", |
2047 | - widget.get_active()) |
2048 | - |
2049 | - def on_checkbutton_systray_icon_toggled(self, widget): |
2050 | - """System Tray Icon checkbox toggled""" |
2051 | - self.config.write_preference_value("General", "display_icon", |
2052 | - widget.get_active()) |
2053 | - |
2054 | - def on_effect_checkbox_toggled(self, widget): |
2055 | - """Effect checkbox toggled""" |
2056 | - combobox = self.widgets.get_widget("effect_combobox") |
2057 | - combobox.set_sensitive(widget.get_active()) |
2058 | - self.config.write_preference_value("General", "show_effects", |
2059 | - widget.get_active()) |
2060 | - |
2061 | - def on_effect_combobox_changed(self, widget): |
2062 | - """User changed effect for screen transitions""" |
2063 | - text = widget.get_active_text() |
2064 | - if text == _("No effect"): |
2065 | - english_text = "No effect" |
2066 | - if text == _("Crossfade"): |
2067 | - english_text = "Crossfade" |
2068 | - if text == _("Zoom and fade"): |
2069 | - english_text = "Zoom and fade" |
2070 | - if text == _("Slide"): |
2071 | - english_text = "Slide" |
2072 | - self.config.write_preference_value("General", "transition_effect", |
2073 | - english_text) |
2074 | - |
2075 | - def on_spinbutton_slideshow_step_value_changed(self, widget): |
2076 | - """Activation of slideshow effects""" |
2077 | - self.config.write_preference_value("Photographs", "slideshow_step", |
2078 | - int(widget.get_value())) |
2079 | - |
2080 | - def on_dialog_closed(self, widget, after): |
2081 | - """Callback function for dialog's close button""" |
2082 | - self.close() |
2083 | - |
2084 | - def on_close_button_clicked(self, widget): |
2085 | - """Callback function for dialog's close button""" |
2086 | - self.close() |
2087 | - |
2088 | - def close(self): |
2089 | - """Close Dialog""" |
2090 | - try: |
2091 | - proxy = MessageBusProxy(client_name = "Preferences GUI") |
2092 | - proxy.connectToMessageBus() |
2093 | - proxy.sendMessage(Message(MessageType.PREFERENCES_CONF_UPDATED)) |
2094 | - proxy.disconnectFromMessageBus() |
2095 | - except socket.error: |
2096 | - error = gtk.MessageDialog( |
2097 | - None, gtk.DIALOG_MODAL, |
2098 | - gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, _( |
2099 | - "Entertainer backend is not running. " |
2100 | - "Config updates will happen on backend restart." |
2101 | - )) |
2102 | - error.run() |
2103 | - error.destroy() |
2104 | - |
2105 | - |
2106 | - if(self.STAND_ALONE): |
2107 | - self.pref_dialog.hide() |
2108 | - self.pref_dialog.destroy() |
2109 | - gtk.main_quit() |
2110 | - else: |
2111 | - self.pref_dialog.hide() |
2112 | - self.pref_dialog.destroy() |
2113 | - |
2114 | - def init_dialog_values_from_configure_file(self): |
2115 | - """Read configure file and set dialog widget values with read values. |
2116 | - """ |
2117 | - self.load_themes() |
2118 | - current_theme = self.config.get_theme_name() |
2119 | - |
2120 | - themelist_widget = self.widgets.get_widget("theme_list") |
2121 | - model = gtk.ListStore(str) |
2122 | - |
2123 | - cell_renderer = gtk.CellRendererText() |
2124 | - column = gtk.TreeViewColumn("Themes", cell_renderer, text=0) |
2125 | - themelist_widget.append_column(column) |
2126 | - |
2127 | - # Fill model with installed themes |
2128 | - for i in range(len(self.themes)): |
2129 | - model.insert(i, [self.themes[i]]) |
2130 | - |
2131 | - themelist_widget.set_model(model) |
2132 | - |
2133 | - # Set current theme selected in theme list |
2134 | - index = model.get_iter_first() |
2135 | - unselected = True |
2136 | - index_counter = 0 |
2137 | - while(unselected): |
2138 | - name = model.get_value(index, 0) |
2139 | - if name == current_theme: |
2140 | - unselected = False |
2141 | - themelist_widget.set_cursor(index_counter) |
2142 | - index = model.iter_next(index) |
2143 | - index_counter += 1 |
2144 | - |
2145 | - # Checkboxes |
2146 | - checkbutton_systray_icon = self.widgets.get_widget( |
2147 | - "checkbutton_systray_icon") |
2148 | - if self.config.tray_icon_enabled(): |
2149 | - checkbutton_systray_icon.set_active(True) |
2150 | - else: |
2151 | - checkbutton_systray_icon.set_active(False) |
2152 | - |
2153 | - checkbutton_autostart = self.widgets.get_widget("checkbutton_autostart") |
2154 | - if self.config.start_auto_server(): |
2155 | - checkbutton_autostart.set_active(True) |
2156 | - else: |
2157 | - checkbutton_autostart.set_active(False) |
2158 | - |
2159 | - checkbutton_fullscreen = self.widgets.get_widget( |
2160 | - "checkbutton_fullscreen") |
2161 | - if self.config.start_in_fullscreen(): |
2162 | - checkbutton_fullscreen.set_active(True) |
2163 | - else: |
2164 | - checkbutton_fullscreen.set_active(False) |
2165 | - |
2166 | - effect_checkbox = self.widgets.get_widget("effect_checkbox") |
2167 | - effect_combobox = self.widgets.get_widget("effect_combobox") |
2168 | - if self.config.show_effects(): |
2169 | - effect_checkbox.set_active(True) |
2170 | - effect_combobox.set_sensitive(True) |
2171 | - else: |
2172 | - effect_checkbox.set_active(False) |
2173 | - effect_combobox.set_sensitive(False) |
2174 | - |
2175 | - spinbutton_slideshow_step = self.widgets.get_widget( |
2176 | - "spinbutton_slideshow_step") |
2177 | - spinbutton_slideshow_step.set_value(self.config.get_slideshow_step()) |
2178 | - |
2179 | - # Set Effect Combobox value (Text values are set in glade file) |
2180 | - effect = self.config.transition_effect() |
2181 | - if effect == "No effect": |
2182 | - effect_combobox.set_active(0) |
2183 | - if effect == "Crossfade": |
2184 | - effect_combobox.set_active(1) |
2185 | - if effect == "Zoom and fade": |
2186 | - effect_combobox.set_active(2) |
2187 | - if effect == "Slide": |
2188 | - effect_combobox.set_active(3) |
2189 | - |
2190 | |
2191 | === removed file 'entertainerlib/glade/entertainer-preferences.glade' |
2192 | --- entertainerlib/glade/entertainer-preferences.glade 2009-03-08 22:29:55 +0000 |
2193 | +++ entertainerlib/glade/entertainer-preferences.glade 1970-01-01 00:00:00 +0000 |
2194 | @@ -1,1223 +0,0 @@ |
2195 | -<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> |
2196 | -<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> |
2197 | - |
2198 | -<glade-interface> |
2199 | - |
2200 | -<widget class="GtkDialog" id="PreferencesDialog"> |
2201 | - <property name="border_width">5</property> |
2202 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
2203 | - <property name="title" translatable="yes">Preferences</property> |
2204 | - <property name="type">GTK_WINDOW_TOPLEVEL</property> |
2205 | - <property name="window_position">GTK_WIN_POS_CENTER</property> |
2206 | - <property name="modal">True</property> |
2207 | - <property name="resizable">True</property> |
2208 | - <property name="destroy_with_parent">False</property> |
2209 | - <property name="icon_name">gtk-preferences</property> |
2210 | - <property name="decorated">True</property> |
2211 | - <property name="skip_taskbar_hint">False</property> |
2212 | - <property name="skip_pager_hint">False</property> |
2213 | - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> |
2214 | - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> |
2215 | - <property name="focus_on_map">True</property> |
2216 | - <property name="urgency_hint">False</property> |
2217 | - <property name="has_separator">False</property> |
2218 | - <signal name="delete_event" handler="on_PreferencesDialog_delete_event"/> |
2219 | - |
2220 | - <child internal-child="vbox"> |
2221 | - <widget class="GtkVBox" id="dialog-vbox1"> |
2222 | - <property name="visible">True</property> |
2223 | - <property name="homogeneous">False</property> |
2224 | - <property name="spacing">2</property> |
2225 | - |
2226 | - <child internal-child="action_area"> |
2227 | - <widget class="GtkHButtonBox" id="dialog-action_area1"> |
2228 | - <property name="visible">True</property> |
2229 | - <property name="layout_style">GTK_BUTTONBOX_END</property> |
2230 | - |
2231 | - <child> |
2232 | - <widget class="GtkButton" id="close_button"> |
2233 | - <property name="visible">True</property> |
2234 | - <property name="can_focus">True</property> |
2235 | - <property name="label">gtk-close</property> |
2236 | - <property name="use_stock">True</property> |
2237 | - <property name="relief">GTK_RELIEF_NORMAL</property> |
2238 | - <property name="focus_on_click">True</property> |
2239 | - <property name="response_id">0</property> |
2240 | - <signal name="clicked" handler="on_close_button_clicked"/> |
2241 | - </widget> |
2242 | - </child> |
2243 | - </widget> |
2244 | - <packing> |
2245 | - <property name="padding">0</property> |
2246 | - <property name="expand">False</property> |
2247 | - <property name="fill">True</property> |
2248 | - <property name="pack_type">GTK_PACK_END</property> |
2249 | - </packing> |
2250 | - </child> |
2251 | - |
2252 | - <child> |
2253 | - <widget class="GtkNotebook" id="notebook1"> |
2254 | - <property name="visible">True</property> |
2255 | - <property name="can_focus">True</property> |
2256 | - <property name="show_tabs">True</property> |
2257 | - <property name="show_border">True</property> |
2258 | - <property name="tab_pos">GTK_POS_TOP</property> |
2259 | - <property name="scrollable">False</property> |
2260 | - <property name="enable_popup">False</property> |
2261 | - |
2262 | - <child> |
2263 | - <widget class="GtkVBox" id="vbox4"> |
2264 | - <property name="visible">True</property> |
2265 | - <property name="homogeneous">False</property> |
2266 | - <property name="spacing">0</property> |
2267 | - |
2268 | - <child> |
2269 | - <widget class="GtkFrame" id="frame3"> |
2270 | - <property name="border_width">5</property> |
2271 | - <property name="visible">True</property> |
2272 | - <property name="label_xalign">0</property> |
2273 | - <property name="label_yalign">0.5</property> |
2274 | - <property name="shadow_type">GTK_SHADOW_NONE</property> |
2275 | - |
2276 | - <child> |
2277 | - <widget class="GtkAlignment" id="alignment3"> |
2278 | - <property name="visible">True</property> |
2279 | - <property name="xalign">0.5</property> |
2280 | - <property name="yalign">0.5</property> |
2281 | - <property name="xscale">1</property> |
2282 | - <property name="yscale">1</property> |
2283 | - <property name="top_padding">0</property> |
2284 | - <property name="bottom_padding">0</property> |
2285 | - <property name="left_padding">12</property> |
2286 | - <property name="right_padding">0</property> |
2287 | - |
2288 | - <child> |
2289 | - <widget class="GtkVBox" id="vbox5"> |
2290 | - <property name="visible">True</property> |
2291 | - <property name="homogeneous">False</property> |
2292 | - <property name="spacing">0</property> |
2293 | - |
2294 | - <child> |
2295 | - <widget class="GtkCheckButton" id="checkbutton_autostart"> |
2296 | - <property name="visible">True</property> |
2297 | - <property name="can_focus">True</property> |
2298 | - <property name="label" translatable="yes">Start server automatically</property> |
2299 | - <property name="use_underline">True</property> |
2300 | - <property name="relief">GTK_RELIEF_NORMAL</property> |
2301 | - <property name="focus_on_click">True</property> |
2302 | - <property name="active">False</property> |
2303 | - <property name="inconsistent">False</property> |
2304 | - <property name="draw_indicator">True</property> |
2305 | - <signal name="toggled" handler="on_checkbutton_autostart_toggled"/> |
2306 | - </widget> |
2307 | - <packing> |
2308 | - <property name="padding">0</property> |
2309 | - <property name="expand">True</property> |
2310 | - <property name="fill">True</property> |
2311 | - </packing> |
2312 | - </child> |
2313 | - |
2314 | - <child> |
2315 | - <widget class="GtkCheckButton" id="checkbutton_systray_icon"> |
2316 | - <property name="visible">True</property> |
2317 | - <property name="can_focus">True</property> |
2318 | - <property name="label" translatable="yes">Display system tray icon in notification area</property> |
2319 | - <property name="use_underline">True</property> |
2320 | - <property name="relief">GTK_RELIEF_NORMAL</property> |
2321 | - <property name="focus_on_click">True</property> |
2322 | - <property name="active">False</property> |
2323 | - <property name="inconsistent">False</property> |
2324 | - <property name="draw_indicator">True</property> |
2325 | - <signal name="toggled" handler="on_checkbutton_systray_icon_toggled"/> |
2326 | - </widget> |
2327 | - <packing> |
2328 | - <property name="padding">0</property> |
2329 | - <property name="expand">True</property> |
2330 | - <property name="fill">True</property> |
2331 | - </packing> |
2332 | - </child> |
2333 | - |
2334 | - <child> |
2335 | - <widget class="GtkCheckButton" id="checkbutton_fullscreen"> |
2336 | - <property name="visible">True</property> |
2337 | - <property name="can_focus">True</property> |
2338 | - <property name="label" translatable="yes">Start in fullscreen</property> |
2339 | - <property name="use_underline">True</property> |
2340 | - <property name="relief">GTK_RELIEF_NORMAL</property> |
2341 | - <property name="focus_on_click">True</property> |
2342 | - <property name="active">False</property> |
2343 | - <property name="inconsistent">False</property> |
2344 | - <property name="draw_indicator">True</property> |
2345 | - <signal name="toggled" handler="on_checkbutton_fullscreen_toggled" last_modification_time="Sun, 08 Mar 2009 21:58:45 GMT"/> |
2346 | - </widget> |
2347 | - <packing> |
2348 | - <property name="padding">0</property> |
2349 | - <property name="expand">True</property> |
2350 | - <property name="fill">True</property> |
2351 | - </packing> |
2352 | - </child> |
2353 | - </widget> |
2354 | - </child> |
2355 | - </widget> |
2356 | - </child> |
2357 | - |
2358 | - <child> |
2359 | - <widget class="GtkLabel" id="label15"> |
2360 | - <property name="visible">True</property> |
2361 | - <property name="label" translatable="yes"><b>Server settings</b></property> |
2362 | - <property name="use_underline">False</property> |
2363 | - <property name="use_markup">True</property> |
2364 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
2365 | - <property name="wrap">False</property> |
2366 | - <property name="selectable">False</property> |
2367 | - <property name="xalign">0.5</property> |
2368 | - <property name="yalign">0.5</property> |
2369 | - <property name="xpad">0</property> |
2370 | - <property name="ypad">0</property> |
2371 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
2372 | - <property name="width_chars">-1</property> |
2373 | - <property name="single_line_mode">False</property> |
2374 | - <property name="angle">0</property> |
2375 | - </widget> |
2376 | - <packing> |
2377 | - <property name="type">label_item</property> |
2378 | - </packing> |
2379 | - </child> |
2380 | - </widget> |
2381 | - <packing> |
2382 | - <property name="padding">5</property> |
2383 | - <property name="expand">True</property> |
2384 | - <property name="fill">True</property> |
2385 | - </packing> |
2386 | - </child> |
2387 | - |
2388 | - <child> |
2389 | - <widget class="GtkFrame" id="frame4"> |
2390 | - <property name="border_width">5</property> |
2391 | - <property name="label_xalign">0</property> |
2392 | - <property name="label_yalign">0.5</property> |
2393 | - <property name="shadow_type">GTK_SHADOW_NONE</property> |
2394 | - |
2395 | - <child> |
2396 | - <widget class="GtkAlignment" id="alignment4"> |
2397 | - <property name="visible">True</property> |
2398 | - <property name="xalign">0.5</property> |
2399 | - <property name="yalign">0.5</property> |
2400 | - <property name="xscale">1</property> |
2401 | - <property name="yscale">1</property> |
2402 | - <property name="top_padding">0</property> |
2403 | - <property name="bottom_padding">0</property> |
2404 | - <property name="left_padding">12</property> |
2405 | - <property name="right_padding">0</property> |
2406 | - |
2407 | - <child> |
2408 | - <widget class="GtkVBox" id="vbox6"> |
2409 | - <property name="visible">True</property> |
2410 | - <property name="homogeneous">False</property> |
2411 | - <property name="spacing">0</property> |
2412 | - |
2413 | - <child> |
2414 | - <widget class="GtkHBox" id="hbox9"> |
2415 | - <property name="visible">True</property> |
2416 | - <property name="homogeneous">False</property> |
2417 | - <property name="spacing">0</property> |
2418 | - |
2419 | - <child> |
2420 | - <widget class="GtkSpinButton" id="spinbutton1"> |
2421 | - <property name="visible">True</property> |
2422 | - <property name="can_focus">True</property> |
2423 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
2424 | - <property name="climb_rate">1</property> |
2425 | - <property name="digits">0</property> |
2426 | - <property name="numeric">False</property> |
2427 | - <property name="update_policy">GTK_UPDATE_ALWAYS</property> |
2428 | - <property name="snap_to_ticks">False</property> |
2429 | - <property name="wrap">False</property> |
2430 | - <property name="adjustment">0 0 100 1 10 0</property> |
2431 | - </widget> |
2432 | - <packing> |
2433 | - <property name="padding">0</property> |
2434 | - <property name="expand">False</property> |
2435 | - <property name="fill">True</property> |
2436 | - </packing> |
2437 | - </child> |
2438 | - |
2439 | - <child> |
2440 | - <widget class="GtkLabel" id="label26"> |
2441 | - <property name="visible">True</property> |
2442 | - <property name="label" translatable="yes">Screen history size</property> |
2443 | - <property name="use_underline">False</property> |
2444 | - <property name="use_markup">False</property> |
2445 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
2446 | - <property name="wrap">False</property> |
2447 | - <property name="selectable">False</property> |
2448 | - <property name="xalign">0.5</property> |
2449 | - <property name="yalign">0.5</property> |
2450 | - <property name="xpad">0</property> |
2451 | - <property name="ypad">0</property> |
2452 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
2453 | - <property name="width_chars">-1</property> |
2454 | - <property name="single_line_mode">False</property> |
2455 | - <property name="angle">0</property> |
2456 | - </widget> |
2457 | - <packing> |
2458 | - <property name="padding">5</property> |
2459 | - <property name="expand">False</property> |
2460 | - <property name="fill">True</property> |
2461 | - </packing> |
2462 | - </child> |
2463 | - </widget> |
2464 | - <packing> |
2465 | - <property name="padding">0</property> |
2466 | - <property name="expand">True</property> |
2467 | - <property name="fill">True</property> |
2468 | - </packing> |
2469 | - </child> |
2470 | - |
2471 | - <child> |
2472 | - <placeholder/> |
2473 | - </child> |
2474 | - |
2475 | - <child> |
2476 | - <placeholder/> |
2477 | - </child> |
2478 | - </widget> |
2479 | - </child> |
2480 | - </widget> |
2481 | - </child> |
2482 | - |
2483 | - <child> |
2484 | - <widget class="GtkLabel" id="label16"> |
2485 | - <property name="visible">True</property> |
2486 | - <property name="label" translatable="yes"><b>What comes here?</b></property> |
2487 | - <property name="use_underline">False</property> |
2488 | - <property name="use_markup">True</property> |
2489 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
2490 | - <property name="wrap">False</property> |
2491 | - <property name="selectable">False</property> |
2492 | - <property name="xalign">0.5</property> |
2493 | - <property name="yalign">0.5</property> |
2494 | - <property name="xpad">0</property> |
2495 | - <property name="ypad">0</property> |
2496 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
2497 | - <property name="width_chars">-1</property> |
2498 | - <property name="single_line_mode">False</property> |
2499 | - <property name="angle">0</property> |
2500 | - </widget> |
2501 | - <packing> |
2502 | - <property name="type">label_item</property> |
2503 | - </packing> |
2504 | - </child> |
2505 | - </widget> |
2506 | - <packing> |
2507 | - <property name="padding">5</property> |
2508 | - <property name="expand">True</property> |
2509 | - <property name="fill">True</property> |
2510 | - </packing> |
2511 | - </child> |
2512 | - </widget> |
2513 | - <packing> |
2514 | - <property name="tab_expand">False</property> |
2515 | - <property name="tab_fill">True</property> |
2516 | - </packing> |
2517 | - </child> |
2518 | - |
2519 | - <child> |
2520 | - <widget class="GtkLabel" id="label1"> |
2521 | - <property name="visible">True</property> |
2522 | - <property name="label" translatable="yes">General</property> |
2523 | - <property name="use_underline">False</property> |
2524 | - <property name="use_markup">False</property> |
2525 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
2526 | - <property name="wrap">False</property> |
2527 | - <property name="selectable">False</property> |
2528 | - <property name="xalign">0.5</property> |
2529 | - <property name="yalign">0.5</property> |
2530 | - <property name="xpad">0</property> |
2531 | - <property name="ypad">0</property> |
2532 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
2533 | - <property name="width_chars">-1</property> |
2534 | - <property name="single_line_mode">False</property> |
2535 | - <property name="angle">0</property> |
2536 | - </widget> |
2537 | - <packing> |
2538 | - <property name="type">tab</property> |
2539 | - </packing> |
2540 | - </child> |
2541 | - |
2542 | - <child> |
2543 | - <widget class="GtkVBox" id="vbox_user_interface"> |
2544 | - <property name="visible">True</property> |
2545 | - <property name="homogeneous">False</property> |
2546 | - <property name="spacing">0</property> |
2547 | - |
2548 | - <child> |
2549 | - <widget class="GtkFrame" id="frame_effects"> |
2550 | - <property name="border_width">5</property> |
2551 | - <property name="visible">True</property> |
2552 | - <property name="label_xalign">0</property> |
2553 | - <property name="label_yalign">0.5</property> |
2554 | - <property name="shadow_type">GTK_SHADOW_NONE</property> |
2555 | - |
2556 | - <child> |
2557 | - <widget class="GtkAlignment" id="alignment5"> |
2558 | - <property name="visible">True</property> |
2559 | - <property name="xalign">0.5</property> |
2560 | - <property name="yalign">0.5</property> |
2561 | - <property name="xscale">1</property> |
2562 | - <property name="yscale">1</property> |
2563 | - <property name="top_padding">0</property> |
2564 | - <property name="bottom_padding">0</property> |
2565 | - <property name="left_padding">12</property> |
2566 | - <property name="right_padding">0</property> |
2567 | - |
2568 | - <child> |
2569 | - <widget class="GtkVBox" id="vbox7"> |
2570 | - <property name="visible">True</property> |
2571 | - <property name="homogeneous">False</property> |
2572 | - <property name="spacing">0</property> |
2573 | - |
2574 | - <child> |
2575 | - <widget class="GtkCheckButton" id="effect_checkbox"> |
2576 | - <property name="visible">True</property> |
2577 | - <property name="can_focus">True</property> |
2578 | - <property name="label" translatable="yes">Show user interface effects</property> |
2579 | - <property name="use_underline">True</property> |
2580 | - <property name="relief">GTK_RELIEF_NORMAL</property> |
2581 | - <property name="focus_on_click">True</property> |
2582 | - <property name="active">False</property> |
2583 | - <property name="inconsistent">False</property> |
2584 | - <property name="draw_indicator">True</property> |
2585 | - <signal name="toggled" handler="on_effect_checkbox_toggled"/> |
2586 | - </widget> |
2587 | - <packing> |
2588 | - <property name="padding">5</property> |
2589 | - <property name="expand">True</property> |
2590 | - <property name="fill">True</property> |
2591 | - </packing> |
2592 | - </child> |
2593 | - |
2594 | - <child> |
2595 | - <widget class="GtkHBox" id="hbox1"> |
2596 | - <property name="visible">True</property> |
2597 | - <property name="homogeneous">False</property> |
2598 | - <property name="spacing">0</property> |
2599 | - |
2600 | - <child> |
2601 | - <widget class="GtkLabel" id="label19"> |
2602 | - <property name="visible">True</property> |
2603 | - <property name="label" translatable="yes">Screen change effect</property> |
2604 | - <property name="use_underline">False</property> |
2605 | - <property name="use_markup">False</property> |
2606 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
2607 | - <property name="wrap">False</property> |
2608 | - <property name="selectable">False</property> |
2609 | - <property name="xalign">0</property> |
2610 | - <property name="yalign">0.5</property> |
2611 | - <property name="xpad">0</property> |
2612 | - <property name="ypad">0</property> |
2613 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
2614 | - <property name="width_chars">-1</property> |
2615 | - <property name="single_line_mode">False</property> |
2616 | - <property name="angle">0</property> |
2617 | - </widget> |
2618 | - <packing> |
2619 | - <property name="padding">5</property> |
2620 | - <property name="expand">False</property> |
2621 | - <property name="fill">True</property> |
2622 | - </packing> |
2623 | - </child> |
2624 | - |
2625 | - <child> |
2626 | - <widget class="GtkComboBox" id="effect_combobox"> |
2627 | - <property name="visible">True</property> |
2628 | - <property name="items" translatable="yes">No effect |
2629 | -Crossfade |
2630 | -Zoom and fade |
2631 | -Slide</property> |
2632 | - <property name="add_tearoffs">False</property> |
2633 | - <property name="focus_on_click">True</property> |
2634 | - <signal name="changed" handler="on_effect_combobox_changed"/> |
2635 | - </widget> |
2636 | - <packing> |
2637 | - <property name="padding">0</property> |
2638 | - <property name="expand">True</property> |
2639 | - <property name="fill">True</property> |
2640 | - </packing> |
2641 | - </child> |
2642 | - </widget> |
2643 | - <packing> |
2644 | - <property name="padding">0</property> |
2645 | - <property name="expand">True</property> |
2646 | - <property name="fill">True</property> |
2647 | - </packing> |
2648 | - </child> |
2649 | - </widget> |
2650 | - </child> |
2651 | - </widget> |
2652 | - </child> |
2653 | - |
2654 | - <child> |
2655 | - <widget class="GtkLabel" id="label17"> |
2656 | - <property name="visible">True</property> |
2657 | - <property name="label" translatable="yes"><b>Effects</b></property> |
2658 | - <property name="use_underline">False</property> |
2659 | - <property name="use_markup">True</property> |
2660 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
2661 | - <property name="wrap">False</property> |
2662 | - <property name="selectable">False</property> |
2663 | - <property name="xalign">0.5</property> |
2664 | - <property name="yalign">0.5</property> |
2665 | - <property name="xpad">0</property> |
2666 | - <property name="ypad">0</property> |
2667 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
2668 | - <property name="width_chars">-1</property> |
2669 | - <property name="single_line_mode">False</property> |
2670 | - <property name="angle">0</property> |
2671 | - </widget> |
2672 | - <packing> |
2673 | - <property name="type">label_item</property> |
2674 | - </packing> |
2675 | - </child> |
2676 | - </widget> |
2677 | - <packing> |
2678 | - <property name="padding">5</property> |
2679 | - <property name="expand">False</property> |
2680 | - <property name="fill">True</property> |
2681 | - </packing> |
2682 | - </child> |
2683 | - |
2684 | - <child> |
2685 | - <widget class="GtkFrame" id="frame_themes"> |
2686 | - <property name="border_width">5</property> |
2687 | - <property name="visible">True</property> |
2688 | - <property name="label_xalign">0</property> |
2689 | - <property name="label_yalign">0.5</property> |
2690 | - <property name="shadow_type">GTK_SHADOW_NONE</property> |
2691 | - |
2692 | - <child> |
2693 | - <widget class="GtkAlignment" id="alignment6"> |
2694 | - <property name="visible">True</property> |
2695 | - <property name="xalign">0.5</property> |
2696 | - <property name="yalign">0.5</property> |
2697 | - <property name="xscale">1</property> |
2698 | - <property name="yscale">1</property> |
2699 | - <property name="top_padding">0</property> |
2700 | - <property name="bottom_padding">0</property> |
2701 | - <property name="left_padding">12</property> |
2702 | - <property name="right_padding">0</property> |
2703 | - |
2704 | - <child> |
2705 | - <widget class="GtkHBox" id="hbox2"> |
2706 | - <property name="visible">True</property> |
2707 | - <property name="homogeneous">False</property> |
2708 | - <property name="spacing">0</property> |
2709 | - |
2710 | - <child> |
2711 | - <widget class="GtkScrolledWindow" id="scrolledwindow1"> |
2712 | - <property name="visible">True</property> |
2713 | - <property name="can_focus">True</property> |
2714 | - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> |
2715 | - <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> |
2716 | - <property name="shadow_type">GTK_SHADOW_IN</property> |
2717 | - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> |
2718 | - |
2719 | - <child> |
2720 | - <widget class="GtkTreeView" id="theme_list"> |
2721 | - <property name="visible">True</property> |
2722 | - <property name="can_focus">True</property> |
2723 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
2724 | - <property name="headers_visible">False</property> |
2725 | - <property name="rules_hint">False</property> |
2726 | - <property name="reorderable">False</property> |
2727 | - <property name="enable_search">False</property> |
2728 | - <property name="fixed_height_mode">False</property> |
2729 | - <property name="hover_selection">False</property> |
2730 | - <property name="hover_expand">False</property> |
2731 | - <signal name="cursor_changed" handler="on_theme_list_cursor_changed"/> |
2732 | - </widget> |
2733 | - </child> |
2734 | - </widget> |
2735 | - <packing> |
2736 | - <property name="padding">0</property> |
2737 | - <property name="expand">True</property> |
2738 | - <property name="fill">True</property> |
2739 | - </packing> |
2740 | - </child> |
2741 | - |
2742 | - <child> |
2743 | - <widget class="GtkVButtonBox" id="vbuttonbox1"> |
2744 | - <property name="visible">True</property> |
2745 | - <property name="layout_style">GTK_BUTTONBOX_START</property> |
2746 | - <property name="spacing">5</property> |
2747 | - |
2748 | - <child> |
2749 | - <widget class="GtkButton" id="add_button"> |
2750 | - <property name="visible">True</property> |
2751 | - <property name="can_focus">True</property> |
2752 | - <property name="label">gtk-add</property> |
2753 | - <property name="use_stock">True</property> |
2754 | - <property name="relief">GTK_RELIEF_NORMAL</property> |
2755 | - <property name="focus_on_click">True</property> |
2756 | - <signal name="clicked" handler="on_add_button_clicked"/> |
2757 | - </widget> |
2758 | - </child> |
2759 | - |
2760 | - <child> |
2761 | - <widget class="GtkButton" id="remove_button"> |
2762 | - <property name="visible">True</property> |
2763 | - <property name="can_focus">True</property> |
2764 | - <property name="label">gtk-remove</property> |
2765 | - <property name="use_stock">True</property> |
2766 | - <property name="relief">GTK_RELIEF_NORMAL</property> |
2767 | - <property name="focus_on_click">True</property> |
2768 | - <signal name="clicked" handler="on_remove_button_clicked"/> |
2769 | - </widget> |
2770 | - </child> |
2771 | - </widget> |
2772 | - <packing> |
2773 | - <property name="padding">10</property> |
2774 | - <property name="expand">False</property> |
2775 | - <property name="fill">True</property> |
2776 | - </packing> |
2777 | - </child> |
2778 | - </widget> |
2779 | - </child> |
2780 | - </widget> |
2781 | - </child> |
2782 | - |
2783 | - <child> |
2784 | - <widget class="GtkLabel" id="label18"> |
2785 | - <property name="visible">True</property> |
2786 | - <property name="label" translatable="yes"><b>Themes</b></property> |
2787 | - <property name="use_underline">False</property> |
2788 | - <property name="use_markup">True</property> |
2789 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
2790 | - <property name="wrap">False</property> |
2791 | - <property name="selectable">False</property> |
2792 | - <property name="xalign">0.5</property> |
2793 | - <property name="yalign">0.5</property> |
2794 | - <property name="xpad">0</property> |
2795 | - <property name="ypad">5</property> |
2796 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
2797 | - <property name="width_chars">-1</property> |
2798 | - <property name="single_line_mode">False</property> |
2799 | - <property name="angle">0</property> |
2800 | - </widget> |
2801 | - <packing> |
2802 | - <property name="type">label_item</property> |
2803 | - </packing> |
2804 | - </child> |
2805 | - </widget> |
2806 | - <packing> |
2807 | - <property name="padding">5</property> |
2808 | - <property name="expand">True</property> |
2809 | - <property name="fill">True</property> |
2810 | - </packing> |
2811 | - </child> |
2812 | - |
2813 | - <child> |
2814 | - <widget class="GtkFrame" id="frame_theme_information"> |
2815 | - <property name="border_width">5</property> |
2816 | - <property name="visible">True</property> |
2817 | - <property name="label_xalign">0</property> |
2818 | - <property name="label_yalign">0.5</property> |
2819 | - <property name="shadow_type">GTK_SHADOW_NONE</property> |
2820 | - |
2821 | - <child> |
2822 | - <widget class="GtkAlignment" id="alignment7"> |
2823 | - <property name="visible">True</property> |
2824 | - <property name="xalign">0.5</property> |
2825 | - <property name="yalign">0.5</property> |
2826 | - <property name="xscale">1</property> |
2827 | - <property name="yscale">1</property> |
2828 | - <property name="top_padding">0</property> |
2829 | - <property name="bottom_padding">0</property> |
2830 | - <property name="left_padding">12</property> |
2831 | - <property name="right_padding">0</property> |
2832 | - |
2833 | - <child> |
2834 | - <widget class="GtkHBox" id="hbox3"> |
2835 | - <property name="visible">True</property> |
2836 | - <property name="homogeneous">False</property> |
2837 | - <property name="spacing">0</property> |
2838 | - |
2839 | - <child> |
2840 | - <widget class="GtkImage" id="theme_image"> |
2841 | - <property name="visible">True</property> |
2842 | - <property name="stock">gtk-missing-image</property> |
2843 | - <property name="icon_size">4</property> |
2844 | - <property name="xalign">0.5</property> |
2845 | - <property name="yalign">0.5</property> |
2846 | - <property name="xpad">0</property> |
2847 | - <property name="ypad">0</property> |
2848 | - </widget> |
2849 | - <packing> |
2850 | - <property name="padding">0</property> |
2851 | - <property name="expand">False</property> |
2852 | - <property name="fill">False</property> |
2853 | - </packing> |
2854 | - </child> |
2855 | - |
2856 | - <child> |
2857 | - <widget class="GtkVBox" id="vbox8"> |
2858 | - <property name="visible">True</property> |
2859 | - <property name="homogeneous">False</property> |
2860 | - <property name="spacing">0</property> |
2861 | - |
2862 | - <child> |
2863 | - <widget class="GtkHBox" id="hbox4"> |
2864 | - <property name="visible">True</property> |
2865 | - <property name="homogeneous">False</property> |
2866 | - <property name="spacing">0</property> |
2867 | - |
2868 | - <child> |
2869 | - <widget class="GtkLabel" id="label21"> |
2870 | - <property name="visible">True</property> |
2871 | - <property name="label" translatable="yes"><b>Name:</b></property> |
2872 | - <property name="use_underline">False</property> |
2873 | - <property name="use_markup">True</property> |
2874 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
2875 | - <property name="wrap">False</property> |
2876 | - <property name="selectable">False</property> |
2877 | - <property name="xalign">0</property> |
2878 | - <property name="yalign">0.5</property> |
2879 | - <property name="xpad">0</property> |
2880 | - <property name="ypad">5</property> |
2881 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
2882 | - <property name="width_chars">-1</property> |
2883 | - <property name="single_line_mode">False</property> |
2884 | - <property name="angle">0</property> |
2885 | - </widget> |
2886 | - <packing> |
2887 | - <property name="padding">5</property> |
2888 | - <property name="expand">False</property> |
2889 | - <property name="fill">True</property> |
2890 | - </packing> |
2891 | - </child> |
2892 | - |
2893 | - <child> |
2894 | - <widget class="GtkLabel" id="name_label"> |
2895 | - <property name="visible">True</property> |
2896 | - <property name="label" translatable="yes"></property> |
2897 | - <property name="use_underline">False</property> |
2898 | - <property name="use_markup">False</property> |
2899 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
2900 | - <property name="wrap">False</property> |
2901 | - <property name="selectable">False</property> |
2902 | - <property name="xalign">0</property> |
2903 | - <property name="yalign">0.5</property> |
2904 | - <property name="xpad">0</property> |
2905 | - <property name="ypad">0</property> |
2906 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
2907 | - <property name="width_chars">-1</property> |
2908 | - <property name="single_line_mode">False</property> |
2909 | - <property name="angle">0</property> |
2910 | - </widget> |
2911 | - <packing> |
2912 | - <property name="padding">0</property> |
2913 | - <property name="expand">True</property> |
2914 | - <property name="fill">True</property> |
2915 | - </packing> |
2916 | - </child> |
2917 | - </widget> |
2918 | - <packing> |
2919 | - <property name="padding">0</property> |
2920 | - <property name="expand">True</property> |
2921 | - <property name="fill">True</property> |
2922 | - </packing> |
2923 | - </child> |
2924 | - |
2925 | - <child> |
2926 | - <widget class="GtkHBox" id="hbox5"> |
2927 | - <property name="visible">True</property> |
2928 | - <property name="homogeneous">False</property> |
2929 | - <property name="spacing">0</property> |
2930 | - |
2931 | - <child> |
2932 | - <widget class="GtkLabel" id="label22"> |
2933 | - <property name="visible">True</property> |
2934 | - <property name="label" translatable="yes"><b>Author:</b></property> |
2935 | - <property name="use_underline">False</property> |
2936 | - <property name="use_markup">True</property> |
2937 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
2938 | - <property name="wrap">False</property> |
2939 | - <property name="selectable">False</property> |
2940 | - <property name="xalign">0</property> |
2941 | - <property name="yalign">0.5</property> |
2942 | - <property name="xpad">0</property> |
2943 | - <property name="ypad">5</property> |
2944 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
2945 | - <property name="width_chars">-1</property> |
2946 | - <property name="single_line_mode">False</property> |
2947 | - <property name="angle">0</property> |
2948 | - </widget> |
2949 | - <packing> |
2950 | - <property name="padding">5</property> |
2951 | - <property name="expand">False</property> |
2952 | - <property name="fill">True</property> |
2953 | - </packing> |
2954 | - </child> |
2955 | - |
2956 | - <child> |
2957 | - <widget class="GtkLabel" id="author_label"> |
2958 | - <property name="visible">True</property> |
2959 | - <property name="label" translatable="yes"></property> |
2960 | - <property name="use_underline">False</property> |
2961 | - <property name="use_markup">False</property> |
2962 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
2963 | - <property name="wrap">False</property> |
2964 | - <property name="selectable">False</property> |
2965 | - <property name="xalign">0</property> |
2966 | - <property name="yalign">0.5</property> |
2967 | - <property name="xpad">0</property> |
2968 | - <property name="ypad">0</property> |
2969 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
2970 | - <property name="width_chars">-1</property> |
2971 | - <property name="single_line_mode">False</property> |
2972 | - <property name="angle">0</property> |
2973 | - </widget> |
2974 | - <packing> |
2975 | - <property name="padding">0</property> |
2976 | - <property name="expand">True</property> |
2977 | - <property name="fill">True</property> |
2978 | - </packing> |
2979 | - </child> |
2980 | - </widget> |
2981 | - <packing> |
2982 | - <property name="padding">0</property> |
2983 | - <property name="expand">True</property> |
2984 | - <property name="fill">True</property> |
2985 | - </packing> |
2986 | - </child> |
2987 | - |
2988 | - <child> |
2989 | - <widget class="GtkHBox" id="hbox6"> |
2990 | - <property name="visible">True</property> |
2991 | - <property name="homogeneous">False</property> |
2992 | - <property name="spacing">0</property> |
2993 | - |
2994 | - <child> |
2995 | - <widget class="GtkLabel" id="label23"> |
2996 | - <property name="visible">True</property> |
2997 | - <property name="label" translatable="yes"><b>Licence:</b></property> |
2998 | - <property name="use_underline">False</property> |
2999 | - <property name="use_markup">True</property> |
3000 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
3001 | - <property name="wrap">False</property> |
3002 | - <property name="selectable">False</property> |
3003 | - <property name="xalign">0</property> |
3004 | - <property name="yalign">0.5</property> |
3005 | - <property name="xpad">0</property> |
3006 | - <property name="ypad">5</property> |
3007 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
3008 | - <property name="width_chars">-1</property> |
3009 | - <property name="single_line_mode">False</property> |
3010 | - <property name="angle">0</property> |
3011 | - </widget> |
3012 | - <packing> |
3013 | - <property name="padding">5</property> |
3014 | - <property name="expand">False</property> |
3015 | - <property name="fill">True</property> |
3016 | - </packing> |
3017 | - </child> |
3018 | - |
3019 | - <child> |
3020 | - <widget class="GtkLabel" id="licence_label"> |
3021 | - <property name="visible">True</property> |
3022 | - <property name="label" translatable="yes"></property> |
3023 | - <property name="use_underline">False</property> |
3024 | - <property name="use_markup">False</property> |
3025 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
3026 | - <property name="wrap">False</property> |
3027 | - <property name="selectable">False</property> |
3028 | - <property name="xalign">0</property> |
3029 | - <property name="yalign">0.5</property> |
3030 | - <property name="xpad">0</property> |
3031 | - <property name="ypad">0</property> |
3032 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
3033 | - <property name="width_chars">-1</property> |
3034 | - <property name="single_line_mode">False</property> |
3035 | - <property name="angle">0</property> |
3036 | - </widget> |
3037 | - <packing> |
3038 | - <property name="padding">0</property> |
3039 | - <property name="expand">True</property> |
3040 | - <property name="fill">True</property> |
3041 | - </packing> |
3042 | - </child> |
3043 | - </widget> |
3044 | - <packing> |
3045 | - <property name="padding">0</property> |
3046 | - <property name="expand">True</property> |
3047 | - <property name="fill">True</property> |
3048 | - </packing> |
3049 | - </child> |
3050 | - |
3051 | - <child> |
3052 | - <widget class="GtkHBox" id="hbox8"> |
3053 | - <property name="visible">True</property> |
3054 | - <property name="homogeneous">False</property> |
3055 | - <property name="spacing">0</property> |
3056 | - |
3057 | - <child> |
3058 | - <widget class="GtkLabel" id="label24"> |
3059 | - <property name="visible">True</property> |
3060 | - <property name="label" translatable="yes"><b>Copyright:</b></property> |
3061 | - <property name="use_underline">False</property> |
3062 | - <property name="use_markup">True</property> |
3063 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
3064 | - <property name="wrap">False</property> |
3065 | - <property name="selectable">False</property> |
3066 | - <property name="xalign">0</property> |
3067 | - <property name="yalign">0.5</property> |
3068 | - <property name="xpad">0</property> |
3069 | - <property name="ypad">5</property> |
3070 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
3071 | - <property name="width_chars">-1</property> |
3072 | - <property name="single_line_mode">False</property> |
3073 | - <property name="angle">0</property> |
3074 | - </widget> |
3075 | - <packing> |
3076 | - <property name="padding">5</property> |
3077 | - <property name="expand">False</property> |
3078 | - <property name="fill">True</property> |
3079 | - </packing> |
3080 | - </child> |
3081 | - |
3082 | - <child> |
3083 | - <widget class="GtkLabel" id="copyright_label"> |
3084 | - <property name="visible">True</property> |
3085 | - <property name="label" translatable="yes"></property> |
3086 | - <property name="use_underline">False</property> |
3087 | - <property name="use_markup">False</property> |
3088 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
3089 | - <property name="wrap">False</property> |
3090 | - <property name="selectable">False</property> |
3091 | - <property name="xalign">0</property> |
3092 | - <property name="yalign">0.5</property> |
3093 | - <property name="xpad">0</property> |
3094 | - <property name="ypad">0</property> |
3095 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
3096 | - <property name="width_chars">-1</property> |
3097 | - <property name="single_line_mode">False</property> |
3098 | - <property name="angle">0</property> |
3099 | - </widget> |
3100 | - <packing> |
3101 | - <property name="padding">0</property> |
3102 | - <property name="expand">True</property> |
3103 | - <property name="fill">True</property> |
3104 | - </packing> |
3105 | - </child> |
3106 | - </widget> |
3107 | - <packing> |
3108 | - <property name="padding">0</property> |
3109 | - <property name="expand">True</property> |
3110 | - <property name="fill">True</property> |
3111 | - </packing> |
3112 | - </child> |
3113 | - |
3114 | - <child> |
3115 | - <widget class="GtkHBox" id="hbox7"> |
3116 | - <property name="visible">True</property> |
3117 | - <property name="homogeneous">False</property> |
3118 | - <property name="spacing">0</property> |
3119 | - |
3120 | - <child> |
3121 | - <widget class="GtkLabel" id="label25"> |
3122 | - <property name="visible">True</property> |
3123 | - <property name="label" translatable="yes"><b>Comment:</b></property> |
3124 | - <property name="use_underline">False</property> |
3125 | - <property name="use_markup">True</property> |
3126 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
3127 | - <property name="wrap">False</property> |
3128 | - <property name="selectable">False</property> |
3129 | - <property name="xalign">0</property> |
3130 | - <property name="yalign">0.5</property> |
3131 | - <property name="xpad">0</property> |
3132 | - <property name="ypad">5</property> |
3133 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
3134 | - <property name="width_chars">-1</property> |
3135 | - <property name="single_line_mode">False</property> |
3136 | - <property name="angle">0</property> |
3137 | - </widget> |
3138 | - <packing> |
3139 | - <property name="padding">5</property> |
3140 | - <property name="expand">False</property> |
3141 | - <property name="fill">True</property> |
3142 | - </packing> |
3143 | - </child> |
3144 | - |
3145 | - <child> |
3146 | - <widget class="GtkLabel" id="comment_label"> |
3147 | - <property name="visible">True</property> |
3148 | - <property name="label" translatable="yes"></property> |
3149 | - <property name="use_underline">False</property> |
3150 | - <property name="use_markup">False</property> |
3151 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
3152 | - <property name="wrap">True</property> |
3153 | - <property name="selectable">False</property> |
3154 | - <property name="xalign">0</property> |
3155 | - <property name="yalign">0.5</property> |
3156 | - <property name="xpad">0</property> |
3157 | - <property name="ypad">0</property> |
3158 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
3159 | - <property name="width_chars">-1</property> |
3160 | - <property name="single_line_mode">False</property> |
3161 | - <property name="angle">0</property> |
3162 | - </widget> |
3163 | - <packing> |
3164 | - <property name="padding">0</property> |
3165 | - <property name="expand">True</property> |
3166 | - <property name="fill">True</property> |
3167 | - </packing> |
3168 | - </child> |
3169 | - </widget> |
3170 | - <packing> |
3171 | - <property name="padding">0</property> |
3172 | - <property name="expand">True</property> |
3173 | - <property name="fill">True</property> |
3174 | - </packing> |
3175 | - </child> |
3176 | - </widget> |
3177 | - <packing> |
3178 | - <property name="padding">0</property> |
3179 | - <property name="expand">True</property> |
3180 | - <property name="fill">True</property> |
3181 | - </packing> |
3182 | - </child> |
3183 | - </widget> |
3184 | - </child> |
3185 | - </widget> |
3186 | - </child> |
3187 | - |
3188 | - <child> |
3189 | - <widget class="GtkLabel" id="label20"> |
3190 | - <property name="visible">True</property> |
3191 | - <property name="label" translatable="yes"><b>Theme information</b></property> |
3192 | - <property name="use_underline">False</property> |
3193 | - <property name="use_markup">True</property> |
3194 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
3195 | - <property name="wrap">False</property> |
3196 | - <property name="selectable">False</property> |
3197 | - <property name="xalign">0.5</property> |
3198 | - <property name="yalign">0.5</property> |
3199 | - <property name="xpad">0</property> |
3200 | - <property name="ypad">5</property> |
3201 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
3202 | - <property name="width_chars">-1</property> |
3203 | - <property name="single_line_mode">False</property> |
3204 | - <property name="angle">0</property> |
3205 | - </widget> |
3206 | - <packing> |
3207 | - <property name="type">label_item</property> |
3208 | - </packing> |
3209 | - </child> |
3210 | - </widget> |
3211 | - <packing> |
3212 | - <property name="padding">0</property> |
3213 | - <property name="expand">False</property> |
3214 | - <property name="fill">True</property> |
3215 | - </packing> |
3216 | - </child> |
3217 | - </widget> |
3218 | - <packing> |
3219 | - <property name="tab_expand">False</property> |
3220 | - <property name="tab_fill">True</property> |
3221 | - </packing> |
3222 | - </child> |
3223 | - |
3224 | - <child> |
3225 | - <widget class="GtkLabel" id="label2"> |
3226 | - <property name="visible">True</property> |
3227 | - <property name="label" translatable="yes">User interface</property> |
3228 | - <property name="use_underline">False</property> |
3229 | - <property name="use_markup">False</property> |
3230 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
3231 | - <property name="wrap">False</property> |
3232 | - <property name="selectable">False</property> |
3233 | - <property name="xalign">0.5</property> |
3234 | - <property name="yalign">0.5</property> |
3235 | - <property name="xpad">0</property> |
3236 | - <property name="ypad">0</property> |
3237 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
3238 | - <property name="width_chars">-1</property> |
3239 | - <property name="single_line_mode">False</property> |
3240 | - <property name="angle">0</property> |
3241 | - </widget> |
3242 | - <packing> |
3243 | - <property name="type">tab</property> |
3244 | - </packing> |
3245 | - </child> |
3246 | - |
3247 | - <child> |
3248 | - <widget class="GtkVBox" id="vbox_photographs"> |
3249 | - <property name="visible">True</property> |
3250 | - <property name="homogeneous">False</property> |
3251 | - <property name="spacing">0</property> |
3252 | - |
3253 | - <child> |
3254 | - <widget class="GtkFrame" id="fphotographs"> |
3255 | - <property name="visible">True</property> |
3256 | - <property name="label_xalign">0</property> |
3257 | - <property name="label_yalign">0.5</property> |
3258 | - <property name="shadow_type">GTK_SHADOW_NONE</property> |
3259 | - |
3260 | - <child> |
3261 | - <widget class="GtkAlignment" id="aphotographs1"> |
3262 | - <property name="visible">True</property> |
3263 | - <property name="xalign">0.5</property> |
3264 | - <property name="yalign">0.5</property> |
3265 | - <property name="xscale">1</property> |
3266 | - <property name="yscale">1</property> |
3267 | - <property name="top_padding">0</property> |
3268 | - <property name="bottom_padding">0</property> |
3269 | - <property name="left_padding">12</property> |
3270 | - <property name="right_padding">0</property> |
3271 | - |
3272 | - <child> |
3273 | - <widget class="GtkVBox" id="vbox10"> |
3274 | - <property name="visible">True</property> |
3275 | - <property name="homogeneous">False</property> |
3276 | - <property name="spacing">0</property> |
3277 | - |
3278 | - <child> |
3279 | - <widget class="GtkHBox" id="hbphotographs"> |
3280 | - <property name="visible">True</property> |
3281 | - <property name="homogeneous">False</property> |
3282 | - <property name="spacing">0</property> |
3283 | - |
3284 | - <child> |
3285 | - <widget class="GtkSpinButton" id="spinbutton_slideshow_step"> |
3286 | - <property name="visible">True</property> |
3287 | - <property name="can_focus">True</property> |
3288 | - <property name="climb_rate">1</property> |
3289 | - <property name="digits">0</property> |
3290 | - <property name="numeric">True</property> |
3291 | - <property name="update_policy">GTK_UPDATE_ALWAYS</property> |
3292 | - <property name="snap_to_ticks">True</property> |
3293 | - <property name="wrap">False</property> |
3294 | - <property name="adjustment">5 1 100 1 10 0</property> |
3295 | - <signal name="value_changed" handler="on_spinbutton_slideshow_step_value_changed"/> |
3296 | - </widget> |
3297 | - <packing> |
3298 | - <property name="padding">0</property> |
3299 | - <property name="expand">True</property> |
3300 | - <property name="fill">True</property> |
3301 | - </packing> |
3302 | - </child> |
3303 | - |
3304 | - <child> |
3305 | - <widget class="GtkLabel" id="lslideshowstep"> |
3306 | - <property name="visible">True</property> |
3307 | - <property name="label" translatable="yes">Slideshow step (in seconds)</property> |
3308 | - <property name="use_underline">False</property> |
3309 | - <property name="use_markup">False</property> |
3310 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
3311 | - <property name="wrap">False</property> |
3312 | - <property name="selectable">False</property> |
3313 | - <property name="xalign">0.5</property> |
3314 | - <property name="yalign">0.5</property> |
3315 | - <property name="xpad">0</property> |
3316 | - <property name="ypad">0</property> |
3317 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
3318 | - <property name="width_chars">-1</property> |
3319 | - <property name="single_line_mode">False</property> |
3320 | - <property name="angle">0</property> |
3321 | - </widget> |
3322 | - <packing> |
3323 | - <property name="padding">0</property> |
3324 | - <property name="expand">True</property> |
3325 | - <property name="fill">True</property> |
3326 | - </packing> |
3327 | - </child> |
3328 | - </widget> |
3329 | - <packing> |
3330 | - <property name="padding">0</property> |
3331 | - <property name="expand">False</property> |
3332 | - <property name="fill">True</property> |
3333 | - </packing> |
3334 | - </child> |
3335 | - </widget> |
3336 | - </child> |
3337 | - </widget> |
3338 | - </child> |
3339 | - |
3340 | - <child> |
3341 | - <widget class="GtkLabel" id="lslideshow"> |
3342 | - <property name="visible">True</property> |
3343 | - <property name="label" translatable="yes"><b>Slideshow</b></property> |
3344 | - <property name="use_underline">False</property> |
3345 | - <property name="use_markup">True</property> |
3346 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
3347 | - <property name="wrap">False</property> |
3348 | - <property name="selectable">False</property> |
3349 | - <property name="xalign">0.5</property> |
3350 | - <property name="yalign">0.5</property> |
3351 | - <property name="xpad">0</property> |
3352 | - <property name="ypad">0</property> |
3353 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
3354 | - <property name="width_chars">-1</property> |
3355 | - <property name="single_line_mode">False</property> |
3356 | - <property name="angle">0</property> |
3357 | - </widget> |
3358 | - <packing> |
3359 | - <property name="type">label_item</property> |
3360 | - </packing> |
3361 | - </child> |
3362 | - </widget> |
3363 | - <packing> |
3364 | - <property name="padding">5</property> |
3365 | - <property name="expand">True</property> |
3366 | - <property name="fill">True</property> |
3367 | - </packing> |
3368 | - </child> |
3369 | - |
3370 | - <child> |
3371 | - <placeholder/> |
3372 | - </child> |
3373 | - |
3374 | - <child> |
3375 | - <placeholder/> |
3376 | - </child> |
3377 | - </widget> |
3378 | - <packing> |
3379 | - <property name="tab_expand">False</property> |
3380 | - <property name="tab_fill">True</property> |
3381 | - </packing> |
3382 | - </child> |
3383 | - |
3384 | - <child> |
3385 | - <widget class="GtkLabel" id="LPhotographs"> |
3386 | - <property name="visible">True</property> |
3387 | - <property name="label" translatable="yes">Photographs</property> |
3388 | - <property name="use_underline">False</property> |
3389 | - <property name="use_markup">False</property> |
3390 | - <property name="justify">GTK_JUSTIFY_LEFT</property> |
3391 | - <property name="wrap">False</property> |
3392 | - <property name="selectable">False</property> |
3393 | - <property name="xalign">0.5</property> |
3394 | - <property name="yalign">0.5</property> |
3395 | - <property name="xpad">0</property> |
3396 | - <property name="ypad">0</property> |
3397 | - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> |
3398 | - <property name="width_chars">-1</property> |
3399 | - <property name="single_line_mode">False</property> |
3400 | - <property name="angle">0</property> |
3401 | - </widget> |
3402 | - <packing> |
3403 | - <property name="type">tab</property> |
3404 | - </packing> |
3405 | - </child> |
3406 | - </widget> |
3407 | - <packing> |
3408 | - <property name="padding">0</property> |
3409 | - <property name="expand">True</property> |
3410 | - <property name="fill">True</property> |
3411 | - </packing> |
3412 | - </child> |
3413 | - </widget> |
3414 | - </child> |
3415 | -</widget> |
3416 | - |
3417 | -</glade-interface> |
3418 | |
3419 | === renamed file 'entertainerlib/glade/entertainer-content-management.glade' => 'entertainerlib/glade/manager.glade' |
3420 | --- entertainerlib/glade/entertainer-content-management.glade 2009-05-31 16:36:18 +0000 |
3421 | +++ entertainerlib/glade/manager.glade 2009-08-23 01:01:18 +0000 |
3422 | @@ -1,1481 +1,2170 @@ |
3423 | -<?xml version="1.0"?> |
3424 | +<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> |
3425 | +<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> |
3426 | + |
3427 | <glade-interface> |
3428 | - <!-- interface-requires gtk+ 2.16 --> |
3429 | - <!-- interface-naming-policy toplevel-contextual --> |
3430 | - <widget class="GtkDialog" id="ContentManagementDialog"> |
3431 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
3432 | - <property name="border_width">5</property> |
3433 | - <property name="title" translatable="yes">Content management</property> |
3434 | - <property name="modal">True</property> |
3435 | - <property name="window_position">center</property> |
3436 | - <property name="icon_name">applications-multimedia</property> |
3437 | - <property name="type_hint">dialog</property> |
3438 | - <property name="has_separator">False</property> |
3439 | - <signal name="destroy" handler="on_ContentManagementDialog_destroy"/> |
3440 | - <child internal-child="vbox"> |
3441 | - <widget class="GtkVBox" id="dialog-layout"> |
3442 | - <property name="visible">True</property> |
3443 | - <property name="spacing">2</property> |
3444 | - <child> |
3445 | - <widget class="GtkNotebook" id="tabs"> |
3446 | - <property name="visible">True</property> |
3447 | - <property name="can_focus">True</property> |
3448 | - <property name="has_focus">True</property> |
3449 | - <property name="can_default">True</property> |
3450 | - <property name="has_default">True</property> |
3451 | - <child> |
3452 | - <widget class="GtkVBox" id="vbox_videos"> |
3453 | - <property name="visible">True</property> |
3454 | - <child> |
3455 | - <widget class="GtkVBox" id="vbox1"> |
3456 | - <property name="visible">True</property> |
3457 | - <child> |
3458 | - <widget class="GtkFrame" id="frame_video_lib1"> |
3459 | - <property name="visible">True</property> |
3460 | - <property name="border_width">5</property> |
3461 | - <property name="label_xalign">0</property> |
3462 | - <property name="shadow_type">none</property> |
3463 | - <child> |
3464 | - <widget class="GtkAlignment" id="alignment1"> |
3465 | - <property name="visible">True</property> |
3466 | - <property name="left_padding">12</property> |
3467 | - <child> |
3468 | - <widget class="GtkVBox" id="vbox2"> |
3469 | - <property name="visible">True</property> |
3470 | - <child> |
3471 | - <widget class="GtkLabel" id="label_video_folder_tip1"> |
3472 | - <property name="visible">True</property> |
3473 | - <property name="xalign">0</property> |
3474 | - <property name="label" translatable="yes">Entertainer video library scans data from the listed folders.</property> |
3475 | - <property name="single_line_mode">True</property> |
3476 | - </widget> |
3477 | - <packing> |
3478 | - <property name="expand">False</property> |
3479 | - <property name="padding">5</property> |
3480 | - <property name="position">0</property> |
3481 | - </packing> |
3482 | - </child> |
3483 | - <child> |
3484 | - <widget class="GtkHBox" id="hbox2"> |
3485 | - <property name="visible">True</property> |
3486 | - <child> |
3487 | - <widget class="GtkScrolledWindow" id="scrolledwindow1"> |
3488 | - <property name="visible">True</property> |
3489 | - <property name="can_focus">True</property> |
3490 | - <property name="hscrollbar_policy">automatic</property> |
3491 | - <property name="vscrollbar_policy">automatic</property> |
3492 | - <property name="shadow_type">in</property> |
3493 | - <child> |
3494 | - <widget class="GtkTreeView" id="treeview_videos"> |
3495 | - <property name="visible">True</property> |
3496 | - <property name="can_focus">True</property> |
3497 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
3498 | - <property name="enable_search">False</property> |
3499 | - </widget> |
3500 | - </child> |
3501 | - </widget> |
3502 | - <packing> |
3503 | - <property name="position">0</property> |
3504 | - </packing> |
3505 | - </child> |
3506 | - <child> |
3507 | - <widget class="GtkVButtonBox" id="vbuttonbox1"> |
3508 | - <property name="visible">True</property> |
3509 | - <property name="spacing">5</property> |
3510 | - <property name="layout_style">start</property> |
3511 | - <child> |
3512 | - <widget class="GtkButton" id="button_add_videos"> |
3513 | - <property name="label">gtk-add</property> |
3514 | - <property name="visible">True</property> |
3515 | - <property name="can_focus">True</property> |
3516 | - <property name="has_focus">True</property> |
3517 | - <property name="can_default">True</property> |
3518 | - <property name="has_default">True</property> |
3519 | - <property name="receives_default">False</property> |
3520 | - <property name="use_stock">True</property> |
3521 | - <signal name="clicked" handler="on_button_add_videos_clicked"/> |
3522 | - </widget> |
3523 | - <packing> |
3524 | - <property name="expand">False</property> |
3525 | - <property name="fill">False</property> |
3526 | - <property name="position">0</property> |
3527 | - </packing> |
3528 | - </child> |
3529 | - <child> |
3530 | - <widget class="GtkButton" id="button_remove_videos"> |
3531 | - <property name="label">gtk-remove</property> |
3532 | - <property name="visible">True</property> |
3533 | - <property name="can_focus">True</property> |
3534 | - <property name="receives_default">False</property> |
3535 | - <property name="use_stock">True</property> |
3536 | - <signal name="clicked" handler="on_button_remove_videos_clicked"/> |
3537 | - </widget> |
3538 | - <packing> |
3539 | - <property name="expand">False</property> |
3540 | - <property name="fill">False</property> |
3541 | - <property name="position">1</property> |
3542 | - </packing> |
3543 | - </child> |
3544 | - <child> |
3545 | - <widget class="GtkButton" id="button_edit_videos"> |
3546 | - <property name="label">gtk-edit</property> |
3547 | - <property name="visible">True</property> |
3548 | - <property name="can_focus">True</property> |
3549 | - <property name="receives_default">False</property> |
3550 | - <property name="use_stock">True</property> |
3551 | - <signal name="clicked" handler="on_button_edit_videos_clicked"/> |
3552 | - </widget> |
3553 | - <packing> |
3554 | - <property name="expand">False</property> |
3555 | - <property name="fill">False</property> |
3556 | - <property name="position">2</property> |
3557 | - </packing> |
3558 | - </child> |
3559 | - </widget> |
3560 | - <packing> |
3561 | - <property name="expand">False</property> |
3562 | - <property name="padding">5</property> |
3563 | - <property name="position">1</property> |
3564 | - </packing> |
3565 | - </child> |
3566 | - </widget> |
3567 | - <packing> |
3568 | - <property name="position">1</property> |
3569 | - </packing> |
3570 | - </child> |
3571 | - </widget> |
3572 | - </child> |
3573 | - </widget> |
3574 | - </child> |
3575 | - <child> |
3576 | - <widget class="GtkLabel" id="label_video_library1"> |
3577 | - <property name="visible">True</property> |
3578 | - <property name="label" translatable="yes"><b>Video library</b></property> |
3579 | - <property name="use_markup">True</property> |
3580 | - </widget> |
3581 | - <packing> |
3582 | - <property name="type">label_item</property> |
3583 | - </packing> |
3584 | - </child> |
3585 | - </widget> |
3586 | - <packing> |
3587 | - <property name="position">0</property> |
3588 | - </packing> |
3589 | - </child> |
3590 | - <child> |
3591 | - <widget class="GtkFrame" id="frame1"> |
3592 | - <property name="visible">True</property> |
3593 | - <property name="label_xalign">0</property> |
3594 | - <property name="shadow_type">none</property> |
3595 | - <child> |
3596 | - <widget class="GtkAlignment" id="alignment2"> |
3597 | - <property name="visible">True</property> |
3598 | - <property name="left_padding">12</property> |
3599 | - <child> |
3600 | - <widget class="GtkCheckButton" id="video_metadata_checkbox"> |
3601 | - <property name="label" translatable="yes">Download movie and TV-series metadata</property> |
3602 | - <property name="visible">True</property> |
3603 | - <property name="can_focus">True</property> |
3604 | - <property name="receives_default">False</property> |
3605 | - <property name="use_underline">True</property> |
3606 | - <property name="draw_indicator">True</property> |
3607 | - <signal name="toggled" handler="on_checkbutton_video_metadata_toggled"/> |
3608 | - </widget> |
3609 | - </child> |
3610 | - </widget> |
3611 | - </child> |
3612 | - <child> |
3613 | - <widget class="GtkLabel" id="label2"> |
3614 | - <property name="visible">True</property> |
3615 | - <property name="label" translatable="yes"><b>Video library settings</b></property> |
3616 | - <property name="use_markup">True</property> |
3617 | - </widget> |
3618 | - <packing> |
3619 | - <property name="type">label_item</property> |
3620 | - </packing> |
3621 | - </child> |
3622 | - </widget> |
3623 | - <packing> |
3624 | - <property name="position">1</property> |
3625 | - </packing> |
3626 | - </child> |
3627 | - </widget> |
3628 | - <packing> |
3629 | - <property name="position">0</property> |
3630 | - </packing> |
3631 | - </child> |
3632 | - </widget> |
3633 | - </child> |
3634 | - <child> |
3635 | - <widget class="GtkLabel" id="label_video3"> |
3636 | - <property name="visible">True</property> |
3637 | - <property name="can_focus">True</property> |
3638 | - <property name="has_focus">True</property> |
3639 | - <property name="has_default">True</property> |
3640 | - <property name="label" translatable="yes">Videos</property> |
3641 | - </widget> |
3642 | - <packing> |
3643 | - <property name="tab_fill">False</property> |
3644 | - <property name="type">tab</property> |
3645 | - </packing> |
3646 | - </child> |
3647 | - <child> |
3648 | - <widget class="GtkVBox" id="vbox_music"> |
3649 | - <property name="visible">True</property> |
3650 | - <child> |
3651 | - <widget class="GtkFrame" id="frame_music_folders3"> |
3652 | - <property name="visible">True</property> |
3653 | - <property name="border_width">5</property> |
3654 | - <property name="label_xalign">0</property> |
3655 | - <property name="shadow_type">none</property> |
3656 | - <child> |
3657 | - <widget class="GtkAlignment" id="alignment9"> |
3658 | - <property name="visible">True</property> |
3659 | - <property name="left_padding">12</property> |
3660 | - <child> |
3661 | - <widget class="GtkVBox" id="vbox12"> |
3662 | - <property name="visible">True</property> |
3663 | - <child> |
3664 | - <widget class="GtkLabel" id="label8"> |
3665 | - <property name="visible">True</property> |
3666 | - <property name="xalign">0</property> |
3667 | - <property name="label" translatable="yes">Entertainer music library scans data from the listed folders.</property> |
3668 | - </widget> |
3669 | - <packing> |
3670 | - <property name="expand">False</property> |
3671 | - <property name="padding">5</property> |
3672 | - <property name="position">0</property> |
3673 | - </packing> |
3674 | - </child> |
3675 | - <child> |
3676 | - <widget class="GtkHBox" id="hbox12"> |
3677 | - <property name="visible">True</property> |
3678 | - <child> |
3679 | - <widget class="GtkScrolledWindow" id="scrolledwindow5"> |
3680 | - <property name="visible">True</property> |
3681 | - <property name="can_focus">True</property> |
3682 | - <property name="hscrollbar_policy">automatic</property> |
3683 | - <property name="vscrollbar_policy">automatic</property> |
3684 | - <property name="shadow_type">in</property> |
3685 | - <child> |
3686 | - <widget class="GtkTreeView" id="treeview_music"> |
3687 | - <property name="visible">True</property> |
3688 | - <property name="can_focus">True</property> |
3689 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
3690 | - <property name="enable_search">False</property> |
3691 | - </widget> |
3692 | - </child> |
3693 | - </widget> |
3694 | - <packing> |
3695 | - <property name="position">0</property> |
3696 | - </packing> |
3697 | - </child> |
3698 | - <child> |
3699 | - <widget class="GtkVButtonBox" id="vbuttonbox6"> |
3700 | - <property name="visible">True</property> |
3701 | - <property name="spacing">5</property> |
3702 | - <property name="layout_style">start</property> |
3703 | - <child> |
3704 | - <widget class="GtkButton" id="button_add_music"> |
3705 | - <property name="label">gtk-add</property> |
3706 | - <property name="visible">True</property> |
3707 | - <property name="can_focus">True</property> |
3708 | - <property name="receives_default">False</property> |
3709 | - <property name="use_stock">True</property> |
3710 | - <signal name="clicked" handler="on_button_add_music_clicked"/> |
3711 | - </widget> |
3712 | - <packing> |
3713 | - <property name="expand">False</property> |
3714 | - <property name="fill">False</property> |
3715 | - <property name="position">0</property> |
3716 | - </packing> |
3717 | - </child> |
3718 | - <child> |
3719 | - <widget class="GtkButton" id="button_remove_music"> |
3720 | - <property name="label">gtk-remove</property> |
3721 | - <property name="visible">True</property> |
3722 | - <property name="can_focus">True</property> |
3723 | - <property name="receives_default">False</property> |
3724 | - <property name="use_stock">True</property> |
3725 | - <signal name="clicked" handler="on_button_remove_music_clicked"/> |
3726 | - </widget> |
3727 | - <packing> |
3728 | - <property name="expand">False</property> |
3729 | - <property name="fill">False</property> |
3730 | - <property name="position">1</property> |
3731 | - </packing> |
3732 | - </child> |
3733 | - <child> |
3734 | - <widget class="GtkButton" id="button_edit_music"> |
3735 | - <property name="label">gtk-edit</property> |
3736 | - <property name="visible">True</property> |
3737 | - <property name="can_focus">True</property> |
3738 | - <property name="receives_default">False</property> |
3739 | - <property name="use_stock">True</property> |
3740 | - <signal name="clicked" handler="on_button_edit_music_clicked"/> |
3741 | - </widget> |
3742 | - <packing> |
3743 | - <property name="expand">False</property> |
3744 | - <property name="fill">False</property> |
3745 | - <property name="position">2</property> |
3746 | - </packing> |
3747 | - </child> |
3748 | - </widget> |
3749 | - <packing> |
3750 | - <property name="expand">False</property> |
3751 | - <property name="padding">5</property> |
3752 | - <property name="position">1</property> |
3753 | - </packing> |
3754 | - </child> |
3755 | - </widget> |
3756 | - <packing> |
3757 | - <property name="position">1</property> |
3758 | - </packing> |
3759 | - </child> |
3760 | - </widget> |
3761 | - </child> |
3762 | - </widget> |
3763 | - </child> |
3764 | - <child> |
3765 | - <widget class="GtkLabel" id="label_music_folders3"> |
3766 | - <property name="visible">True</property> |
3767 | - <property name="label" translatable="yes"><b>Music library</b></property> |
3768 | - <property name="use_markup">True</property> |
3769 | - </widget> |
3770 | - <packing> |
3771 | - <property name="type">label_item</property> |
3772 | - </packing> |
3773 | - </child> |
3774 | - </widget> |
3775 | - <packing> |
3776 | - <property name="position">0</property> |
3777 | - </packing> |
3778 | - </child> |
3779 | - <child> |
3780 | - <widget class="GtkFrame" id="frame_music_lib_settings3"> |
3781 | - <property name="visible">True</property> |
3782 | - <property name="border_width">5</property> |
3783 | - <property name="label_xalign">0</property> |
3784 | - <property name="shadow_type">none</property> |
3785 | - <child> |
3786 | - <widget class="GtkAlignment" id="alignment10"> |
3787 | - <property name="visible">True</property> |
3788 | - <property name="left_padding">12</property> |
3789 | - <child> |
3790 | - <widget class="GtkVBox" id="vbox13"> |
3791 | - <property name="visible">True</property> |
3792 | - <property name="homogeneous">True</property> |
3793 | - <child> |
3794 | - <widget class="GtkCheckButton" id="art_checkbox"> |
3795 | - <property name="label" translatable="yes">Download album cover art</property> |
3796 | - <property name="visible">True</property> |
3797 | - <property name="can_focus">True</property> |
3798 | - <property name="receives_default">False</property> |
3799 | - <property name="use_underline">True</property> |
3800 | - <property name="draw_indicator">True</property> |
3801 | - <signal name="toggled" handler="on_art_checkbox_toggled"/> |
3802 | - </widget> |
3803 | - <packing> |
3804 | - <property name="padding">5</property> |
3805 | - <property name="position">0</property> |
3806 | - </packing> |
3807 | - </child> |
3808 | - <child> |
3809 | - <widget class="GtkCheckButton" id="lyrics_checkbox"> |
3810 | - <property name="label" translatable="yes">Download song lyrics</property> |
3811 | - <property name="visible">True</property> |
3812 | - <property name="can_focus">True</property> |
3813 | - <property name="receives_default">False</property> |
3814 | - <property name="use_underline">True</property> |
3815 | - <property name="draw_indicator">True</property> |
3816 | - <signal name="toggled" handler="on_lyrics_checkbox_toggled"/> |
3817 | - </widget> |
3818 | - <packing> |
3819 | - <property name="padding">5</property> |
3820 | - <property name="position">1</property> |
3821 | - </packing> |
3822 | - </child> |
3823 | - </widget> |
3824 | - </child> |
3825 | - </widget> |
3826 | - </child> |
3827 | - <child> |
3828 | - <widget class="GtkLabel" id="label9"> |
3829 | - <property name="visible">True</property> |
3830 | - <property name="label" translatable="yes"><b>Music library settings</b></property> |
3831 | - <property name="use_markup">True</property> |
3832 | - </widget> |
3833 | - <packing> |
3834 | - <property name="type">label_item</property> |
3835 | - </packing> |
3836 | - </child> |
3837 | - </widget> |
3838 | - <packing> |
3839 | - <property name="expand">False</property> |
3840 | - <property name="position">1</property> |
3841 | - </packing> |
3842 | - </child> |
3843 | - </widget> |
3844 | - <packing> |
3845 | - <property name="position">1</property> |
3846 | - </packing> |
3847 | - </child> |
3848 | - <child> |
3849 | - <widget class="GtkLabel" id="label10"> |
3850 | - <property name="visible">True</property> |
3851 | - <property name="label" translatable="yes">Music</property> |
3852 | - </widget> |
3853 | - <packing> |
3854 | - <property name="position">1</property> |
3855 | - <property name="tab_fill">False</property> |
3856 | - <property name="type">tab</property> |
3857 | - </packing> |
3858 | - </child> |
3859 | - <child> |
3860 | - <widget class="GtkVBox" id="vbox14"> |
3861 | - <property name="visible">True</property> |
3862 | - <child> |
3863 | - <widget class="GtkFrame" id="frame_image_folders3"> |
3864 | - <property name="visible">True</property> |
3865 | - <property name="border_width">5</property> |
3866 | - <property name="label_xalign">0</property> |
3867 | - <property name="shadow_type">none</property> |
3868 | - <child> |
3869 | - <widget class="GtkAlignment" id="alignment11"> |
3870 | - <property name="visible">True</property> |
3871 | - <property name="left_padding">12</property> |
3872 | - <child> |
3873 | - <widget class="GtkVBox" id="vbox15"> |
3874 | - <property name="visible">True</property> |
3875 | - <child> |
3876 | - <widget class="GtkLabel" id="label_music_tip3"> |
3877 | - <property name="visible">True</property> |
3878 | - <property name="xalign">0</property> |
3879 | - <property name="label" translatable="yes">Entertainer image library scans data from the listed folders.</property> |
3880 | - </widget> |
3881 | - <packing> |
3882 | - <property name="expand">False</property> |
3883 | - <property name="padding">5</property> |
3884 | - <property name="position">0</property> |
3885 | - </packing> |
3886 | - </child> |
3887 | - <child> |
3888 | - <widget class="GtkHBox" id="hbox14"> |
3889 | - <property name="visible">True</property> |
3890 | - <child> |
3891 | - <widget class="GtkScrolledWindow" id="scrolledwindow6"> |
3892 | - <property name="visible">True</property> |
3893 | - <property name="can_focus">True</property> |
3894 | - <property name="hscrollbar_policy">automatic</property> |
3895 | - <property name="vscrollbar_policy">automatic</property> |
3896 | - <property name="shadow_type">in</property> |
3897 | - <child> |
3898 | - <widget class="GtkTreeView" id="treeview_images"> |
3899 | - <property name="visible">True</property> |
3900 | - <property name="can_focus">True</property> |
3901 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
3902 | - <property name="enable_search">False</property> |
3903 | - </widget> |
3904 | - </child> |
3905 | - </widget> |
3906 | - <packing> |
3907 | - <property name="position">0</property> |
3908 | - </packing> |
3909 | - </child> |
3910 | - <child> |
3911 | - <widget class="GtkVButtonBox" id="vbuttonbox7"> |
3912 | - <property name="visible">True</property> |
3913 | - <property name="spacing">5</property> |
3914 | - <property name="layout_style">start</property> |
3915 | - <child> |
3916 | - <widget class="GtkButton" id="button_add_images"> |
3917 | - <property name="label">gtk-add</property> |
3918 | - <property name="visible">True</property> |
3919 | - <property name="can_focus">True</property> |
3920 | - <property name="receives_default">False</property> |
3921 | - <property name="use_stock">True</property> |
3922 | - <signal name="clicked" handler="on_button_add_images_clicked"/> |
3923 | - </widget> |
3924 | - <packing> |
3925 | - <property name="expand">False</property> |
3926 | - <property name="fill">False</property> |
3927 | - <property name="position">0</property> |
3928 | - </packing> |
3929 | - </child> |
3930 | - <child> |
3931 | - <widget class="GtkButton" id="button_remove_images"> |
3932 | - <property name="label">gtk-remove</property> |
3933 | - <property name="visible">True</property> |
3934 | - <property name="can_focus">True</property> |
3935 | - <property name="receives_default">False</property> |
3936 | - <property name="use_stock">True</property> |
3937 | - <signal name="clicked" handler="on_button_remove_images_clicked"/> |
3938 | - </widget> |
3939 | - <packing> |
3940 | - <property name="expand">False</property> |
3941 | - <property name="fill">False</property> |
3942 | - <property name="position">1</property> |
3943 | - </packing> |
3944 | - </child> |
3945 | - <child> |
3946 | - <widget class="GtkButton" id="button_edit_images"> |
3947 | - <property name="label">gtk-edit</property> |
3948 | - <property name="visible">True</property> |
3949 | - <property name="can_focus">True</property> |
3950 | - <property name="receives_default">False</property> |
3951 | - <property name="use_stock">True</property> |
3952 | - <signal name="clicked" handler="on_button_edit_images_clicked"/> |
3953 | - </widget> |
3954 | - <packing> |
3955 | - <property name="expand">False</property> |
3956 | - <property name="fill">False</property> |
3957 | - <property name="position">2</property> |
3958 | - </packing> |
3959 | - </child> |
3960 | - </widget> |
3961 | - <packing> |
3962 | - <property name="expand">False</property> |
3963 | - <property name="padding">5</property> |
3964 | - <property name="position">1</property> |
3965 | - </packing> |
3966 | - </child> |
3967 | - </widget> |
3968 | - <packing> |
3969 | - <property name="position">1</property> |
3970 | - </packing> |
3971 | - </child> |
3972 | - </widget> |
3973 | - </child> |
3974 | - </widget> |
3975 | - </child> |
3976 | - <child> |
3977 | - <widget class="GtkLabel" id="label11"> |
3978 | - <property name="visible">True</property> |
3979 | - <property name="label" translatable="yes"><b>Image library</b></property> |
3980 | - <property name="use_markup">True</property> |
3981 | - </widget> |
3982 | - <packing> |
3983 | - <property name="type">label_item</property> |
3984 | - </packing> |
3985 | - </child> |
3986 | - </widget> |
3987 | - <packing> |
3988 | - <property name="position">0</property> |
3989 | - </packing> |
3990 | - </child> |
3991 | - <child> |
3992 | - <widget class="GtkFrame" id="frame_image_lib_settings3"> |
3993 | - <property name="visible">True</property> |
3994 | - <property name="border_width">5</property> |
3995 | - <property name="label_xalign">0</property> |
3996 | - <property name="shadow_type">none</property> |
3997 | - <child> |
3998 | - <widget class="GtkAlignment" id="alignment12"> |
3999 | - <property name="visible">True</property> |
4000 | - <property name="left_padding">12</property> |
4001 | - <child> |
4002 | - <widget class="GtkVBox" id="vbox16"> |
4003 | - <property name="visible">True</property> |
4004 | - <child> |
4005 | - <placeholder/> |
4006 | - </child> |
4007 | - <child> |
4008 | - <widget class="GtkCheckButton" id="hidden_files_folders_checkbox"> |
4009 | - <property name="label" translatable="yes">Display hidden files and folders in image library</property> |
4010 | - <property name="visible">True</property> |
4011 | - <property name="can_focus">True</property> |
4012 | - <property name="receives_default">False</property> |
4013 | - <property name="use_underline">True</property> |
4014 | - <property name="draw_indicator">True</property> |
4015 | - <signal name="toggled" handler="on_hidden_files_folders_checkbox_toggled"/> |
4016 | - </widget> |
4017 | - <packing> |
4018 | - <property name="padding">5</property> |
4019 | - <property name="position">1</property> |
4020 | - </packing> |
4021 | - </child> |
4022 | - </widget> |
4023 | - </child> |
4024 | - </widget> |
4025 | - </child> |
4026 | - <child> |
4027 | - <widget class="GtkLabel" id="label_image_lib_settings3"> |
4028 | - <property name="visible">True</property> |
4029 | - <property name="label" translatable="yes"><b>Image library settings</b></property> |
4030 | - <property name="use_markup">True</property> |
4031 | - </widget> |
4032 | - <packing> |
4033 | - <property name="type">label_item</property> |
4034 | - </packing> |
4035 | - </child> |
4036 | - </widget> |
4037 | - <packing> |
4038 | - <property name="expand">False</property> |
4039 | - <property name="position">1</property> |
4040 | - </packing> |
4041 | - </child> |
4042 | - </widget> |
4043 | - <packing> |
4044 | - <property name="position">2</property> |
4045 | - </packing> |
4046 | - </child> |
4047 | - <child> |
4048 | - <widget class="GtkLabel" id="label_images3"> |
4049 | - <property name="visible">True</property> |
4050 | - <property name="label" translatable="yes">Images</property> |
4051 | - </widget> |
4052 | - <packing> |
4053 | - <property name="position">2</property> |
4054 | - <property name="tab_fill">False</property> |
4055 | - <property name="type">tab</property> |
4056 | - </packing> |
4057 | - </child> |
4058 | - <child> |
4059 | - <widget class="GtkVBox" id="vbox_feeds"> |
4060 | - <property name="visible">True</property> |
4061 | - <child> |
4062 | - <widget class="GtkFrame" id="frame_rss_feeds3"> |
4063 | - <property name="visible">True</property> |
4064 | - <property name="border_width">5</property> |
4065 | - <property name="label_xalign">0</property> |
4066 | - <property name="shadow_type">none</property> |
4067 | - <child> |
4068 | - <widget class="GtkAlignment" id="alignment13"> |
4069 | - <property name="visible">True</property> |
4070 | - <property name="left_padding">12</property> |
4071 | - <child> |
4072 | - <widget class="GtkVBox" id="vbox17"> |
4073 | - <property name="visible">True</property> |
4074 | - <child> |
4075 | - <widget class="GtkLabel" id="label_rss_tip3"> |
4076 | - <property name="visible">True</property> |
4077 | - <property name="xalign">0</property> |
4078 | - <property name="label" translatable="yes">Below is a list of RSS feeds that are displayd in Entertainer.</property> |
4079 | - </widget> |
4080 | - <packing> |
4081 | - <property name="expand">False</property> |
4082 | - <property name="padding">5</property> |
4083 | - <property name="position">0</property> |
4084 | - </packing> |
4085 | - </child> |
4086 | - <child> |
4087 | - <widget class="GtkHBox" id="hbox16"> |
4088 | - <property name="visible">True</property> |
4089 | - <child> |
4090 | - <widget class="GtkScrolledWindow" id="scrolledwindow_rss3"> |
4091 | - <property name="visible">True</property> |
4092 | - <property name="can_focus">True</property> |
4093 | - <property name="hscrollbar_policy">automatic</property> |
4094 | - <property name="vscrollbar_policy">automatic</property> |
4095 | - <property name="shadow_type">in</property> |
4096 | - <child> |
4097 | - <widget class="GtkTreeView" id="treeview_feeds"> |
4098 | - <property name="visible">True</property> |
4099 | - <property name="can_focus">True</property> |
4100 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
4101 | - <property name="enable_search">False</property> |
4102 | - </widget> |
4103 | - </child> |
4104 | - </widget> |
4105 | - <packing> |
4106 | - <property name="position">0</property> |
4107 | - </packing> |
4108 | - </child> |
4109 | - <child> |
4110 | - <widget class="GtkVButtonBox" id="vbuttonbox8"> |
4111 | - <property name="visible">True</property> |
4112 | - <property name="spacing">5</property> |
4113 | - <property name="layout_style">start</property> |
4114 | - <child> |
4115 | - <widget class="GtkButton" id="button_add_feed"> |
4116 | - <property name="label">gtk-add</property> |
4117 | - <property name="visible">True</property> |
4118 | - <property name="can_focus">True</property> |
4119 | - <property name="receives_default">False</property> |
4120 | - <property name="tooltip" translatable="yes">Add RSS Feed</property> |
4121 | - <property name="use_stock">True</property> |
4122 | - <signal name="clicked" handler="on_button_add_feed_clicked"/> |
4123 | - </widget> |
4124 | - <packing> |
4125 | - <property name="expand">False</property> |
4126 | - <property name="fill">False</property> |
4127 | - <property name="position">0</property> |
4128 | - </packing> |
4129 | - </child> |
4130 | - <child> |
4131 | - <widget class="GtkButton" id="button_remove_feed"> |
4132 | - <property name="label">gtk-remove</property> |
4133 | - <property name="visible">True</property> |
4134 | - <property name="can_focus">True</property> |
4135 | - <property name="receives_default">False</property> |
4136 | - <property name="tooltip" translatable="yes">Remove RSS Feed</property> |
4137 | - <property name="use_stock">True</property> |
4138 | - <signal name="clicked" handler="on_button_remove_feed_clicked"/> |
4139 | - </widget> |
4140 | - <packing> |
4141 | - <property name="expand">False</property> |
4142 | - <property name="fill">False</property> |
4143 | - <property name="position">1</property> |
4144 | - </packing> |
4145 | - </child> |
4146 | - <child> |
4147 | - <widget class="GtkButton" id="button_edit_feed"> |
4148 | - <property name="label">gtk-edit</property> |
4149 | - <property name="visible">True</property> |
4150 | - <property name="can_focus">True</property> |
4151 | - <property name="receives_default">False</property> |
4152 | - <property name="tooltip" translatable="yes">Edit current item</property> |
4153 | - <property name="use_stock">True</property> |
4154 | - <signal name="clicked" handler="on_button_edit_feed_clicked"/> |
4155 | - </widget> |
4156 | - <packing> |
4157 | - <property name="expand">False</property> |
4158 | - <property name="fill">False</property> |
4159 | - <property name="position">2</property> |
4160 | - </packing> |
4161 | - </child> |
4162 | - <child> |
4163 | - <widget class="GtkButton" id="button_open_list"> |
4164 | - <property name="label">gtk-open</property> |
4165 | - <property name="visible">True</property> |
4166 | - <property name="can_focus">True</property> |
4167 | - <property name="receives_default">False</property> |
4168 | - <property name="tooltip" translatable="yes">Add feeds from a datasource</property> |
4169 | - <property name="use_stock">True</property> |
4170 | - <signal name="clicked" handler="on_button_open_list_clicked"/> |
4171 | - </widget> |
4172 | - <packing> |
4173 | - <property name="expand">False</property> |
4174 | - <property name="fill">False</property> |
4175 | - <property name="position">3</property> |
4176 | - </packing> |
4177 | - </child> |
4178 | - </widget> |
4179 | - <packing> |
4180 | - <property name="expand">False</property> |
4181 | - <property name="padding">5</property> |
4182 | - <property name="position">1</property> |
4183 | - </packing> |
4184 | - </child> |
4185 | - </widget> |
4186 | - <packing> |
4187 | - <property name="position">1</property> |
4188 | - </packing> |
4189 | - </child> |
4190 | - </widget> |
4191 | - </child> |
4192 | - </widget> |
4193 | - </child> |
4194 | - <child> |
4195 | - <widget class="GtkLabel" id="label_rss_sources3"> |
4196 | - <property name="visible">True</property> |
4197 | - <property name="label" translatable="yes"><b>RSS feeds</b></property> |
4198 | - <property name="use_markup">True</property> |
4199 | - </widget> |
4200 | - <packing> |
4201 | - <property name="type">label_item</property> |
4202 | - </packing> |
4203 | - </child> |
4204 | - </widget> |
4205 | - <packing> |
4206 | - <property name="position">0</property> |
4207 | - </packing> |
4208 | - </child> |
4209 | - <child> |
4210 | - <widget class="GtkFrame" id="frame_feed_settings3"> |
4211 | - <property name="visible">True</property> |
4212 | - <property name="border_width">5</property> |
4213 | - <property name="label_xalign">0</property> |
4214 | - <property name="shadow_type">none</property> |
4215 | - <child> |
4216 | - <widget class="GtkAlignment" id="alignment14"> |
4217 | - <property name="visible">True</property> |
4218 | - <property name="left_padding">12</property> |
4219 | - <child> |
4220 | - <widget class="GtkVBox" id="vbox18"> |
4221 | - <property name="visible">True</property> |
4222 | - <child> |
4223 | - <widget class="GtkHBox" id="hbox17"> |
4224 | - <property name="visible">True</property> |
4225 | - <child> |
4226 | - <widget class="GtkLabel" id="label12"> |
4227 | - <property name="visible">True</property> |
4228 | - <property name="label" translatable="yes">Update all feeds every</property> |
4229 | - </widget> |
4230 | - <packing> |
4231 | - <property name="expand">False</property> |
4232 | - <property name="position">0</property> |
4233 | - </packing> |
4234 | - </child> |
4235 | - <child> |
4236 | - <widget class="GtkSpinButton" id="fetch_interval_spinbutton"> |
4237 | - <property name="visible">True</property> |
4238 | - <property name="can_focus">True</property> |
4239 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
4240 | - <property name="adjustment">60 15 900 1 10 0</property> |
4241 | - <property name="climb_rate">1</property> |
4242 | - <property name="numeric">True</property> |
4243 | - <signal name="value_changed" handler="on_fetch_interval_spinbutton_value_changed"/> |
4244 | - </widget> |
4245 | - <packing> |
4246 | - <property name="expand">False</property> |
4247 | - <property name="padding">5</property> |
4248 | - <property name="position">1</property> |
4249 | - </packing> |
4250 | - </child> |
4251 | - <child> |
4252 | - <widget class="GtkLabel" id="label13"> |
4253 | - <property name="visible">True</property> |
4254 | - <property name="label" translatable="yes">minutes.</property> |
4255 | - </widget> |
4256 | - <packing> |
4257 | - <property name="expand">False</property> |
4258 | - <property name="position">2</property> |
4259 | - </packing> |
4260 | - </child> |
4261 | - </widget> |
4262 | - <packing> |
4263 | - <property name="expand">False</property> |
4264 | - <property name="padding">10</property> |
4265 | - <property name="position">0</property> |
4266 | - </packing> |
4267 | - </child> |
4268 | - </widget> |
4269 | - </child> |
4270 | - </widget> |
4271 | - </child> |
4272 | - <child> |
4273 | - <widget class="GtkLabel" id="label_rss_settings3"> |
4274 | - <property name="visible">True</property> |
4275 | - <property name="label" translatable="yes"><b>Feed settings</b></property> |
4276 | - <property name="use_markup">True</property> |
4277 | - </widget> |
4278 | - <packing> |
4279 | - <property name="type">label_item</property> |
4280 | - </packing> |
4281 | - </child> |
4282 | - </widget> |
4283 | - <packing> |
4284 | - <property name="expand">False</property> |
4285 | - <property name="position">1</property> |
4286 | - </packing> |
4287 | - </child> |
4288 | - </widget> |
4289 | - <packing> |
4290 | - <property name="position">3</property> |
4291 | - </packing> |
4292 | - </child> |
4293 | - <child> |
4294 | - <widget class="GtkLabel" id="label_rss3"> |
4295 | - <property name="visible">True</property> |
4296 | - <property name="label" translatable="yes">RSS feeds</property> |
4297 | - </widget> |
4298 | - <packing> |
4299 | - <property name="position">3</property> |
4300 | - <property name="tab_fill">False</property> |
4301 | - <property name="type">tab</property> |
4302 | - </packing> |
4303 | - </child> |
4304 | - <child> |
4305 | - <widget class="GtkVBox" id="vbox5"> |
4306 | - <property name="visible">True</property> |
4307 | - <child> |
4308 | - <widget class="GtkFrame" id="frame_video_lib3"> |
4309 | - <property name="visible">True</property> |
4310 | - <property name="border_width">5</property> |
4311 | - <property name="label_xalign">0</property> |
4312 | - <property name="shadow_type">none</property> |
4313 | - <child> |
4314 | - <widget class="GtkAlignment" id="alignment5"> |
4315 | - <property name="visible">True</property> |
4316 | - <property name="left_padding">12</property> |
4317 | - <child> |
4318 | - <widget class="GtkVBox" id="weather_location_list_area"> |
4319 | - <property name="visible">True</property> |
4320 | - <child> |
4321 | - <widget class="GtkLabel" id="label_weather_tip"> |
4322 | - <property name="visible">True</property> |
4323 | - <property name="xalign">0</property> |
4324 | - <property name="label" translatable="yes">Get weather conditions from the locations listed below.</property> |
4325 | - <property name="single_line_mode">True</property> |
4326 | - </widget> |
4327 | - <packing> |
4328 | - <property name="expand">False</property> |
4329 | - <property name="padding">5</property> |
4330 | - <property name="position">0</property> |
4331 | - </packing> |
4332 | - </child> |
4333 | - <child> |
4334 | - <widget class="GtkHBox" id="hbox4"> |
4335 | - <property name="visible">True</property> |
4336 | - <child> |
4337 | - <widget class="GtkScrolledWindow" id="scrolledwindow3"> |
4338 | - <property name="visible">True</property> |
4339 | - <property name="can_focus">True</property> |
4340 | - <property name="hscrollbar_policy">automatic</property> |
4341 | - <property name="vscrollbar_policy">automatic</property> |
4342 | - <property name="shadow_type">in</property> |
4343 | - <child> |
4344 | - <widget class="GtkTreeView" id="treeview_locations"> |
4345 | - <property name="visible">True</property> |
4346 | - <property name="can_focus">True</property> |
4347 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
4348 | - <property name="enable_search">False</property> |
4349 | - </widget> |
4350 | - </child> |
4351 | - </widget> |
4352 | - <packing> |
4353 | - <property name="position">0</property> |
4354 | - </packing> |
4355 | - </child> |
4356 | - <child> |
4357 | - <widget class="GtkVButtonBox" id="vbuttonbox3"> |
4358 | - <property name="visible">True</property> |
4359 | - <property name="spacing">5</property> |
4360 | - <property name="layout_style">start</property> |
4361 | - <child> |
4362 | - <widget class="GtkButton" id="button_add_weather"> |
4363 | - <property name="label">gtk-new</property> |
4364 | - <property name="visible">True</property> |
4365 | - <property name="can_focus">True</property> |
4366 | - <property name="has_focus">True</property> |
4367 | - <property name="can_default">True</property> |
4368 | - <property name="has_default">True</property> |
4369 | - <property name="receives_default">False</property> |
4370 | - <property name="use_stock">True</property> |
4371 | - <signal name="clicked" handler="on_button_add_weather_clicked"/> |
4372 | - </widget> |
4373 | - <packing> |
4374 | - <property name="expand">False</property> |
4375 | - <property name="fill">False</property> |
4376 | - <property name="position">0</property> |
4377 | - </packing> |
4378 | - </child> |
4379 | - <child> |
4380 | - <widget class="GtkButton" id="button_remove_weather"> |
4381 | - <property name="label">gtk-clear</property> |
4382 | - <property name="visible">True</property> |
4383 | - <property name="can_focus">True</property> |
4384 | - <property name="receives_default">False</property> |
4385 | - <property name="use_stock">True</property> |
4386 | - <signal name="clicked" handler="on_button_remove_weather_clicked"/> |
4387 | - </widget> |
4388 | - <packing> |
4389 | - <property name="expand">False</property> |
4390 | - <property name="fill">False</property> |
4391 | - <property name="position">1</property> |
4392 | - </packing> |
4393 | - </child> |
4394 | - </widget> |
4395 | - <packing> |
4396 | - <property name="expand">False</property> |
4397 | - <property name="padding">5</property> |
4398 | - <property name="position">1</property> |
4399 | - </packing> |
4400 | - </child> |
4401 | - </widget> |
4402 | - <packing> |
4403 | - <property name="position">1</property> |
4404 | - </packing> |
4405 | - </child> |
4406 | - </widget> |
4407 | - </child> |
4408 | - </widget> |
4409 | - </child> |
4410 | - <child> |
4411 | - <widget class="GtkLabel" id="label_weather_options"> |
4412 | - <property name="visible">True</property> |
4413 | - <property name="label" translatable="yes"><b>Weather locations</b></property> |
4414 | - <property name="use_markup">True</property> |
4415 | - </widget> |
4416 | - <packing> |
4417 | - <property name="type">label_item</property> |
4418 | - </packing> |
4419 | - </child> |
4420 | - </widget> |
4421 | - <packing> |
4422 | - <property name="position">0</property> |
4423 | - </packing> |
4424 | - </child> |
4425 | - <child> |
4426 | - <widget class="GtkFrame" id="frame4"> |
4427 | - <property name="visible">True</property> |
4428 | - <property name="label_xalign">0</property> |
4429 | - <property name="shadow_type">none</property> |
4430 | - <child> |
4431 | - <widget class="GtkAlignment" id="alignment7"> |
4432 | - <property name="visible">True</property> |
4433 | - <property name="left_padding">12</property> |
4434 | - <child> |
4435 | - <widget class="GtkVBox" id="vbox7"> |
4436 | - <property name="visible">True</property> |
4437 | - <child> |
4438 | - <widget class="GtkCheckButton" id="weather_display_checkbox"> |
4439 | - <property name="label" translatable="yes">Display weather option in main menu</property> |
4440 | - <property name="visible">True</property> |
4441 | - <property name="can_focus">True</property> |
4442 | - <property name="receives_default">False</property> |
4443 | - <property name="use_underline">True</property> |
4444 | - <property name="active">True</property> |
4445 | - <property name="draw_indicator">True</property> |
4446 | - <signal name="toggled" handler="on_weather_display_checkbox_toggled"/> |
4447 | - </widget> |
4448 | - <packing> |
4449 | - <property name="fill">False</property> |
4450 | - <property name="position">0</property> |
4451 | - </packing> |
4452 | - </child> |
4453 | - </widget> |
4454 | - </child> |
4455 | - </widget> |
4456 | - </child> |
4457 | - <child> |
4458 | - <widget class="GtkLabel" id="label7"> |
4459 | - <property name="visible">True</property> |
4460 | - <property name="label" translatable="yes"><b>Weather settings</b></property> |
4461 | - <property name="use_markup">True</property> |
4462 | - </widget> |
4463 | - <packing> |
4464 | - <property name="type">label_item</property> |
4465 | - </packing> |
4466 | - </child> |
4467 | - </widget> |
4468 | - <packing> |
4469 | - <property name="position">1</property> |
4470 | - </packing> |
4471 | - </child> |
4472 | - </widget> |
4473 | - <packing> |
4474 | - <property name="position">4</property> |
4475 | - </packing> |
4476 | - </child> |
4477 | - <child> |
4478 | - <widget class="GtkLabel" id="label_weather"> |
4479 | - <property name="visible">True</property> |
4480 | - <property name="yalign">0.40999999642372131</property> |
4481 | - <property name="label" translatable="yes">Weather</property> |
4482 | - </widget> |
4483 | - <packing> |
4484 | - <property name="position">4</property> |
4485 | - <property name="tab_fill">False</property> |
4486 | - <property name="type">tab</property> |
4487 | - </packing> |
4488 | - </child> |
4489 | - <child> |
4490 | - <widget class="GtkFrame" id="frame2"> |
4491 | - <property name="visible">True</property> |
4492 | - <property name="border_width">5</property> |
4493 | - <property name="label_xalign">0</property> |
4494 | - <property name="shadow_type">none</property> |
4495 | - <child> |
4496 | - <widget class="GtkAlignment" id="alignment3"> |
4497 | - <property name="visible">True</property> |
4498 | - <property name="left_padding">12</property> |
4499 | - <child> |
4500 | - <widget class="GtkVBox" id="vbox3"> |
4501 | - <property name="visible">True</property> |
4502 | - <child> |
4503 | - <widget class="GtkLabel" id="label5"> |
4504 | - <property name="visible">True</property> |
4505 | - <property name="xpad">7</property> |
4506 | - <property name="ypad">7</property> |
4507 | - <property name="label" translatable="yes">Rebuilding cache means that all data is removed and then |
4508 | -folders are indexed again. This fixes broken media cache.</property> |
4509 | - </widget> |
4510 | - <packing> |
4511 | - <property name="position">0</property> |
4512 | - </packing> |
4513 | - </child> |
4514 | - <child> |
4515 | - <widget class="GtkButton" id="button_video_rebuild"> |
4516 | - <property name="label" translatable="yes">Rebuild video cache</property> |
4517 | - <property name="visible">True</property> |
4518 | - <property name="can_focus">True</property> |
4519 | - <property name="receives_default">False</property> |
4520 | - <property name="border_width">5</property> |
4521 | - <property name="use_underline">True</property> |
4522 | - <signal name="clicked" handler="on_button_video_rebuild_clicked"/> |
4523 | - </widget> |
4524 | - <packing> |
4525 | - <property name="position">1</property> |
4526 | - </packing> |
4527 | - </child> |
4528 | - <child> |
4529 | - <widget class="GtkButton" id="button_music_rebuild"> |
4530 | - <property name="label" translatable="yes">Rebuild music cache</property> |
4531 | - <property name="visible">True</property> |
4532 | - <property name="can_focus">True</property> |
4533 | - <property name="receives_default">False</property> |
4534 | - <property name="border_width">5</property> |
4535 | - <property name="use_underline">True</property> |
4536 | - <signal name="clicked" handler="on_button_music_rebuild_clicked"/> |
4537 | - </widget> |
4538 | - <packing> |
4539 | - <property name="position">2</property> |
4540 | - </packing> |
4541 | - </child> |
4542 | - <child> |
4543 | - <widget class="GtkButton" id="button_image_rebuild"> |
4544 | - <property name="label" translatable="yes">Rebuild image cache</property> |
4545 | - <property name="visible">True</property> |
4546 | - <property name="can_focus">True</property> |
4547 | - <property name="receives_default">False</property> |
4548 | - <property name="border_width">5</property> |
4549 | - <property name="use_underline">True</property> |
4550 | - <signal name="clicked" handler="on_button_image_rebuild_clicked"/> |
4551 | - </widget> |
4552 | - <packing> |
4553 | - <property name="position">3</property> |
4554 | - </packing> |
4555 | - </child> |
4556 | - <child> |
4557 | - <widget class="GtkButton" id="button_feed_rebuild"> |
4558 | - <property name="label" translatable="yes">Rebuild RSS-feed cache</property> |
4559 | - <property name="visible">True</property> |
4560 | - <property name="can_focus">True</property> |
4561 | - <property name="receives_default">False</property> |
4562 | - <property name="border_width">5</property> |
4563 | - <property name="use_underline">True</property> |
4564 | - <property name="focus_on_click">False</property> |
4565 | - <signal name="clicked" handler="on_button_feed_rebuild_clicked"/> |
4566 | - </widget> |
4567 | - <packing> |
4568 | - <property name="position">4</property> |
4569 | - </packing> |
4570 | - </child> |
4571 | - </widget> |
4572 | - </child> |
4573 | - </widget> |
4574 | - </child> |
4575 | - <child> |
4576 | - <widget class="GtkLabel" id="label4"> |
4577 | - <property name="visible">True</property> |
4578 | - <property name="label" translatable="yes"><b>Media cache management</b></property> |
4579 | - <property name="use_markup">True</property> |
4580 | - </widget> |
4581 | - <packing> |
4582 | - <property name="type">label_item</property> |
4583 | - </packing> |
4584 | - </child> |
4585 | - </widget> |
4586 | - <packing> |
4587 | - <property name="position">5</property> |
4588 | - </packing> |
4589 | - </child> |
4590 | - <child> |
4591 | - <widget class="GtkLabel" id="label3"> |
4592 | - <property name="visible">True</property> |
4593 | - <property name="label" translatable="yes">Reset</property> |
4594 | - </widget> |
4595 | - <packing> |
4596 | - <property name="position">5</property> |
4597 | - <property name="tab_fill">False</property> |
4598 | - <property name="type">tab</property> |
4599 | - </packing> |
4600 | - </child> |
4601 | - </widget> |
4602 | - <packing> |
4603 | - <property name="position">1</property> |
4604 | - </packing> |
4605 | - </child> |
4606 | - <child internal-child="action_area"> |
4607 | - <widget class="GtkHButtonBox" id="dialog-closebutton-area"> |
4608 | - <property name="visible">True</property> |
4609 | - <property name="layout_style">end</property> |
4610 | - <child> |
4611 | - <widget class="GtkButton" id="close_button"> |
4612 | - <property name="label">gtk-close</property> |
4613 | - <property name="visible">True</property> |
4614 | - <property name="can_focus">True</property> |
4615 | - <property name="receives_default">False</property> |
4616 | - <property name="use_stock">True</property> |
4617 | - <signal name="clicked" handler="on_close_button_clicked"/> |
4618 | - </widget> |
4619 | - <packing> |
4620 | - <property name="expand">False</property> |
4621 | - <property name="fill">False</property> |
4622 | - <property name="position">0</property> |
4623 | - </packing> |
4624 | - </child> |
4625 | - </widget> |
4626 | - <packing> |
4627 | - <property name="expand">False</property> |
4628 | - <property name="pack_type">end</property> |
4629 | - <property name="position">0</property> |
4630 | - </packing> |
4631 | - </child> |
4632 | - </widget> |
4633 | - </child> |
4634 | - </widget> |
4635 | - <widget class="GtkDialog" id="url_dialog"> |
4636 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
4637 | - <property name="border_width">5</property> |
4638 | - <property name="resizable">False</property> |
4639 | - <property name="modal">True</property> |
4640 | - <property name="window_position">center-on-parent</property> |
4641 | - <property name="destroy_with_parent">True</property> |
4642 | - <property name="icon_name">gtk-edit</property> |
4643 | - <property name="type_hint">normal</property> |
4644 | - <property name="skip_taskbar_hint">True</property> |
4645 | - <property name="has_separator">False</property> |
4646 | - <signal name="delete_event" handler="on_url_dialog_delete_event"/> |
4647 | - <child internal-child="vbox"> |
4648 | - <widget class="GtkVBox" id="dialog-vbox2"> |
4649 | - <property name="visible">True</property> |
4650 | - <property name="spacing">2</property> |
4651 | - <child> |
4652 | - <widget class="GtkHBox" id="hbox1"> |
4653 | - <property name="visible">True</property> |
4654 | - <child> |
4655 | - <widget class="GtkLabel" id="label1"> |
4656 | - <property name="visible">True</property> |
4657 | - <property name="label" translatable="yes">URL:</property> |
4658 | - </widget> |
4659 | - <packing> |
4660 | - <property name="expand">False</property> |
4661 | - <property name="padding">5</property> |
4662 | - <property name="position">0</property> |
4663 | - </packing> |
4664 | - </child> |
4665 | - <child> |
4666 | - <widget class="GtkEntry" id="url_entry"> |
4667 | - <property name="visible">True</property> |
4668 | - <property name="can_focus">True</property> |
4669 | - <property name="has_focus">True</property> |
4670 | - <property name="can_default">True</property> |
4671 | - <property name="has_default">True</property> |
4672 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
4673 | - </widget> |
4674 | - <packing> |
4675 | - <property name="position">1</property> |
4676 | - </packing> |
4677 | - </child> |
4678 | - </widget> |
4679 | - <packing> |
4680 | - <property name="position">1</property> |
4681 | - </packing> |
4682 | - </child> |
4683 | - <child internal-child="action_area"> |
4684 | - <widget class="GtkHButtonBox" id="dialog-action_area2"> |
4685 | - <property name="visible">True</property> |
4686 | - <property name="layout_style">end</property> |
4687 | - <child> |
4688 | - <widget class="GtkButton" id="url_dialog_cancel_button"> |
4689 | - <property name="label">gtk-cancel</property> |
4690 | - <property name="visible">True</property> |
4691 | - <property name="can_focus">True</property> |
4692 | - <property name="receives_default">False</property> |
4693 | - <property name="use_stock">True</property> |
4694 | - <signal name="clicked" handler="on_url_dialog_cancel_button_clicked"/> |
4695 | - </widget> |
4696 | - <packing> |
4697 | - <property name="expand">False</property> |
4698 | - <property name="fill">False</property> |
4699 | - <property name="position">0</property> |
4700 | - </packing> |
4701 | - </child> |
4702 | - <child> |
4703 | - <widget class="GtkButton" id="url_dialog_ok_button"> |
4704 | - <property name="label">gtk-ok</property> |
4705 | - <property name="visible">True</property> |
4706 | - <property name="can_focus">True</property> |
4707 | - <property name="receives_default">False</property> |
4708 | - <property name="use_stock">True</property> |
4709 | - <signal name="clicked" handler="on_url_dialog_ok_button_clicked"/> |
4710 | - </widget> |
4711 | - <packing> |
4712 | - <property name="expand">False</property> |
4713 | - <property name="fill">False</property> |
4714 | - <property name="position">1</property> |
4715 | - </packing> |
4716 | - </child> |
4717 | - </widget> |
4718 | - <packing> |
4719 | - <property name="expand">False</property> |
4720 | - <property name="pack_type">end</property> |
4721 | - <property name="position">0</property> |
4722 | - </packing> |
4723 | - </child> |
4724 | - </widget> |
4725 | - </child> |
4726 | - </widget> |
4727 | - <widget class="GtkDialog" id="weather_search_dialog"> |
4728 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
4729 | - <property name="border_width">5</property> |
4730 | - <property name="window_position">center-on-parent</property> |
4731 | - <property name="type_hint">dialog</property> |
4732 | - <property name="has_separator">False</property> |
4733 | - <child internal-child="vbox"> |
4734 | - <widget class="GtkVBox" id="vbox20"> |
4735 | - <property name="visible">True</property> |
4736 | - <property name="spacing">2</property> |
4737 | - <child> |
4738 | - <widget class="GtkVBox" id="vbox21"> |
4739 | - <property name="visible">True</property> |
4740 | - <child> |
4741 | - <widget class="GtkFrame" id="frame6"> |
4742 | - <property name="visible">True</property> |
4743 | - <property name="label_xalign">0</property> |
4744 | - <property name="shadow_type">none</property> |
4745 | - <child> |
4746 | - <widget class="GtkAlignment" id="alignment16"> |
4747 | - <property name="visible">True</property> |
4748 | - <property name="top_padding">5</property> |
4749 | - <property name="left_padding">12</property> |
4750 | - <child> |
4751 | - <widget class="GtkHBox" id="hbox18"> |
4752 | - <property name="visible">True</property> |
4753 | - <child> |
4754 | - <widget class="GtkLabel" id="label19"> |
4755 | - <property name="visible">True</property> |
4756 | - <property name="label" translatable="yes">City:</property> |
4757 | - </widget> |
4758 | - <packing> |
4759 | - <property name="expand">False</property> |
4760 | - <property name="position">0</property> |
4761 | - </packing> |
4762 | - </child> |
4763 | - <child> |
4764 | - <widget class="GtkEntry" id="location_entry"> |
4765 | - <property name="visible">True</property> |
4766 | - <property name="can_focus">True</property> |
4767 | - <property name="has_focus">True</property> |
4768 | - <property name="can_default">True</property> |
4769 | - <property name="has_default">True</property> |
4770 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
4771 | - <signal name="activate" handler="on_location_entry_activate"/> |
4772 | - </widget> |
4773 | - <packing> |
4774 | - <property name="padding">5</property> |
4775 | - <property name="position">1</property> |
4776 | - </packing> |
4777 | - </child> |
4778 | - <child> |
4779 | - <widget class="GtkButton" id="location_find_button"> |
4780 | - <property name="label">gtk-find</property> |
4781 | - <property name="visible">True</property> |
4782 | - <property name="can_focus">True</property> |
4783 | - <property name="receives_default">False</property> |
4784 | - <property name="use_stock">True</property> |
4785 | - <signal name="clicked" handler="on_location_find_button_clicked"/> |
4786 | - </widget> |
4787 | - <packing> |
4788 | - <property name="padding">5</property> |
4789 | - <property name="position">2</property> |
4790 | - </packing> |
4791 | - </child> |
4792 | - </widget> |
4793 | - </child> |
4794 | - </widget> |
4795 | - </child> |
4796 | - <child> |
4797 | - <widget class="GtkLabel" id="label20"> |
4798 | - <property name="visible">True</property> |
4799 | - <property name="label" translatable="yes"><b>Search for location</b></property> |
4800 | - <property name="use_markup">True</property> |
4801 | - </widget> |
4802 | - <packing> |
4803 | - <property name="type">label_item</property> |
4804 | - </packing> |
4805 | - </child> |
4806 | - </widget> |
4807 | - <packing> |
4808 | - <property name="expand">False</property> |
4809 | - <property name="padding">5</property> |
4810 | - <property name="position">0</property> |
4811 | - </packing> |
4812 | - </child> |
4813 | - <child> |
4814 | - <widget class="GtkFrame" id="frame7"> |
4815 | - <property name="visible">True</property> |
4816 | - <property name="label_xalign">0</property> |
4817 | - <property name="shadow_type">none</property> |
4818 | - <child> |
4819 | - <widget class="GtkAlignment" id="alignment17"> |
4820 | - <property name="visible">True</property> |
4821 | - <property name="left_padding">12</property> |
4822 | - <child> |
4823 | - <widget class="GtkScrolledWindow" id="scrolledwindow7"> |
4824 | - <property name="visible">True</property> |
4825 | - <property name="can_focus">True</property> |
4826 | - <property name="border_width">5</property> |
4827 | - <property name="hscrollbar_policy">never</property> |
4828 | - <property name="vscrollbar_policy">automatic</property> |
4829 | - <property name="shadow_type">etched-in</property> |
4830 | - <child> |
4831 | - <widget class="GtkTreeView" id="location_results_treeview"> |
4832 | - <property name="visible">True</property> |
4833 | - <property name="can_focus">True</property> |
4834 | - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
4835 | - </widget> |
4836 | - </child> |
4837 | - </widget> |
4838 | - </child> |
4839 | - </widget> |
4840 | - </child> |
4841 | - <child> |
4842 | - <widget class="GtkLabel" id="label21"> |
4843 | - <property name="visible">True</property> |
4844 | - <property name="label" translatable="yes"><b>Search result</b></property> |
4845 | - <property name="use_markup">True</property> |
4846 | - </widget> |
4847 | - <packing> |
4848 | - <property name="type">label_item</property> |
4849 | - </packing> |
4850 | - </child> |
4851 | - </widget> |
4852 | - <packing> |
4853 | - <property name="padding">5</property> |
4854 | - <property name="position">1</property> |
4855 | - </packing> |
4856 | - </child> |
4857 | - </widget> |
4858 | - <packing> |
4859 | - <property name="position">1</property> |
4860 | - </packing> |
4861 | - </child> |
4862 | - <child internal-child="action_area"> |
4863 | - <widget class="GtkHButtonBox" id="hbuttonbox1"> |
4864 | - <property name="visible">True</property> |
4865 | - <property name="layout_style">end</property> |
4866 | - <child> |
4867 | - <widget class="GtkButton" id="location_button_cancel"> |
4868 | - <property name="label">gtk-cancel</property> |
4869 | - <property name="visible">True</property> |
4870 | - <property name="can_focus">True</property> |
4871 | - <property name="receives_default">False</property> |
4872 | - <property name="use_stock">True</property> |
4873 | - <signal name="clicked" handler="on_location_cancel_button_clicked"/> |
4874 | - </widget> |
4875 | - <packing> |
4876 | - <property name="expand">False</property> |
4877 | - <property name="fill">False</property> |
4878 | - <property name="position">0</property> |
4879 | - </packing> |
4880 | - </child> |
4881 | - <child> |
4882 | - <widget class="GtkButton" id="location_add_button"> |
4883 | - <property name="label">gtk-add</property> |
4884 | - <property name="visible">True</property> |
4885 | - <property name="can_focus">True</property> |
4886 | - <property name="receives_default">False</property> |
4887 | - <property name="use_stock">True</property> |
4888 | - <signal name="clicked" handler="on_location_add_button_clicked"/> |
4889 | - </widget> |
4890 | - <packing> |
4891 | - <property name="expand">False</property> |
4892 | - <property name="fill">False</property> |
4893 | - <property name="position">1</property> |
4894 | - </packing> |
4895 | - </child> |
4896 | - </widget> |
4897 | - <packing> |
4898 | - <property name="expand">False</property> |
4899 | - <property name="pack_type">end</property> |
4900 | - <property name="position">0</property> |
4901 | - </packing> |
4902 | - </child> |
4903 | - </widget> |
4904 | - </child> |
4905 | - </widget> |
4906 | + |
4907 | +<widget class="GtkDialog" id="ManagerDialog"> |
4908 | + <property name="border_width">5</property> |
4909 | + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> |
4910 | + <property name="title" translatable="yes">Entertainer Manager</property> |
4911 | + <property name="type">GTK_WINDOW_TOPLEVEL</property> |
4912 | + <property name="window_position">GTK_WIN_POS_NONE</property> |
4913 | + <property name="modal">True</property> |
4914 | + <property name="resizable">True</property> |
4915 | + <property name="destroy_with_parent">False</property> |
4916 | + <property name="icon_name">applications-multimedia</property> |
4917 | + <property name="decorated">True</property> |
4918 | + <property name="skip_taskbar_hint">False</property> |
4919 | + <property name="skip_pager_hint">False</property> |
4920 | + <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> |
4921 | + <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> |
4922 | + <property name="focus_on_map">True</property> |
4923 | + <property name="urgency_hint">False</property> |
4924 | + <property name="has_separator">False</property> |
4925 | + <signal name="destroy" handler="on_ManagerDialog_destroy" last_modification_time="Sun, 23 Aug 2009 00:27:03 GMT"/> |
4926 | + |
4927 | + <child internal-child="vbox"> |
4928 | + <widget class="GtkVBox" id="dialog-layout"> |
4929 | + <property name="visible">True</property> |
4930 | + <property name="homogeneous">False</property> |
4931 | + <property name="spacing">2</property> |
4932 | + |
4933 | + <child internal-child="action_area"> |
4934 | + <widget class="GtkHButtonBox" id="dialog-closebutton-area"> |
4935 | + <property name="visible">True</property> |
4936 | + <property name="layout_style">GTK_BUTTONBOX_END</property> |
4937 | + |
4938 | + <child> |
4939 | + <widget class="GtkButton" id="close_button"> |
4940 | + <property name="visible">True</property> |
4941 | + <property name="can_focus">True</property> |
4942 | + <property name="label">gtk-close</property> |
4943 | + <property name="use_stock">True</property> |
4944 | + <property name="relief">GTK_RELIEF_NORMAL</property> |
4945 | + <property name="focus_on_click">True</property> |
4946 | + <property name="response_id">0</property> |
4947 | + <signal name="clicked" handler="on_close_button_clicked"/> |
4948 | + </widget> |
4949 | + </child> |
4950 | + </widget> |
4951 | + <packing> |
4952 | + <property name="padding">0</property> |
4953 | + <property name="expand">False</property> |
4954 | + <property name="fill">True</property> |
4955 | + <property name="pack_type">GTK_PACK_END</property> |
4956 | + </packing> |
4957 | + </child> |
4958 | + |
4959 | + <child> |
4960 | + <widget class="GtkNotebook" id="tabs"> |
4961 | + <property name="visible">True</property> |
4962 | + <property name="can_default">True</property> |
4963 | + <property name="has_default">True</property> |
4964 | + <property name="can_focus">True</property> |
4965 | + <property name="has_focus">True</property> |
4966 | + <property name="show_tabs">True</property> |
4967 | + <property name="show_border">True</property> |
4968 | + <property name="tab_pos">GTK_POS_TOP</property> |
4969 | + <property name="scrollable">False</property> |
4970 | + <property name="enable_popup">False</property> |
4971 | + |
4972 | + <child> |
4973 | + <widget class="GtkVBox" id="vbox_media"> |
4974 | + <property name="visible">True</property> |
4975 | + <property name="homogeneous">False</property> |
4976 | + <property name="spacing">0</property> |
4977 | + |
4978 | + <child> |
4979 | + <widget class="GtkVBox" id="vbox1"> |
4980 | + <property name="visible">True</property> |
4981 | + <property name="homogeneous">False</property> |
4982 | + <property name="spacing">0</property> |
4983 | + |
4984 | + <child> |
4985 | + <widget class="GtkFrame" id="frame_video_lib1"> |
4986 | + <property name="border_width">5</property> |
4987 | + <property name="visible">True</property> |
4988 | + <property name="label_xalign">0</property> |
4989 | + <property name="label_yalign">0.5</property> |
4990 | + <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> |
4991 | + |
4992 | + <child> |
4993 | + <widget class="GtkVBox" id="vbox2"> |
4994 | + <property name="visible">True</property> |
4995 | + <property name="homogeneous">False</property> |
4996 | + <property name="spacing">0</property> |
4997 | + |
4998 | + <child> |
4999 | + <widget class="GtkLabel" id="label_media_folder_tip1"> |
5000 | + <property name="visible">True</property> |
The diff has been truncated for viewing.
This branch is dependent on one-dialog.
With this branch, Entertainer will fully comply its data usage with the XDG spec through the use of the xdg module.
I created a Resources class which is used only by Configuration. It was a was to abstract out the details of getting the proper directories and making sure they exist.
Where is a user's data from now on? entertainer (xdg_config_home + 'entertainer') entertainer (xdg_cache_home + 'entertainer') share/entertain er (xdg_data_home + 'entertainer')
* content.conf is in ~/.config/
* databases and log files in ~/.cache/
* themes in ~/.local/