summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Huuhko <kai.huuhko@gmail.com>2016-09-13 00:17:55 +0300
committerKai Huuhko <kai.huuhko@gmail.com>2016-09-13 00:21:50 +0300
commit8709cc1c9feb5961beb5674890aa1e93f02a7d30 (patch)
tree4dd974b92cf558837a1e070a41be0916a4e858c9
parent44b5485e379965355db2b12e9b3d411d1f25d7a9 (diff)
Add custom theme and icons
Genlist items have a translucent background with simple progressbar on top of that.
-rw-r--r--.gitignore1
-rw-r--r--AUTHORS3
-rw-r--r--data/icons/128x128/actions/session-pause.pngbin0 -> 577 bytes
-rw-r--r--data/icons/128x128/actions/session-resume.pngbin0 -> 1020 bytes
-rw-r--r--data/icons/128x128/actions/toolbar-new.pngbin0 -> 1663 bytes
-rw-r--r--data/icons/128x128/actions/toolbar-quit.pngbin0 -> 3290 bytes
-rw-r--r--data/icons/128x128/actions/toolbar-settings.pngbin0 -> 3660 bytes
-rw-r--r--data/icons/16x16/actions/session-pause.pngbin0 -> 368 bytes
-rw-r--r--data/icons/16x16/actions/session-resume.pngbin0 -> 423 bytes
-rw-r--r--data/icons/16x16/actions/toolbar-new.pngbin0 -> 465 bytes
-rw-r--r--data/icons/16x16/actions/toolbar-quit.pngbin0 -> 615 bytes
-rw-r--r--data/icons/16x16/actions/toolbar-settings.pngbin0 -> 627 bytes
-rw-r--r--epour/gui/__init__.py168
-rwxr-xr-xsetup.py76
-rw-r--r--themes/default/images/bevel_curved_horiz_out.pngbin0 -> 136 bytes
-rw-r--r--themes/default/images/bevel_horiz_out.pngbin0 -> 74 bytes
-rw-r--r--themes/default/images/shadow_rounded_horiz.pngbin0 -> 486 bytes
-rw-r--r--themes/default/images/shine.pngbin0 -> 232 bytes
-rw-r--r--themes/default/images/states/128/torrent-active.pngbin0 -> 1020 bytes
-rw-r--r--themes/default/images/states/128/torrent-allocating.pngbin0 -> 2759 bytes
-rw-r--r--themes/default/images/states/128/torrent-checking-files.pngbin0 -> 3479 bytes
-rw-r--r--themes/default/images/states/128/torrent-checking-resume-data.pngbin0 -> 1226 bytes
-rw-r--r--themes/default/images/states/128/torrent-downloading-metadata.pngbin0 -> 3753 bytes
-rw-r--r--themes/default/images/states/128/torrent-downloading.pngbin0 -> 2641 bytes
-rw-r--r--themes/default/images/states/128/torrent-finished.pngbin0 -> 828 bytes
-rw-r--r--themes/default/images/states/128/torrent-paused.pngbin0 -> 578 bytes
-rw-r--r--themes/default/images/states/128/torrent-queued.pngbin0 -> 1318 bytes
-rw-r--r--themes/default/images/states/128/torrent-seeding.pngbin0 -> 2334 bytes
-rw-r--r--themes/default/images/states/16/torrent-active.pngbin0 -> 423 bytes
-rw-r--r--themes/default/images/states/16/torrent-allocating.pngbin0 -> 682 bytes
-rw-r--r--themes/default/images/states/16/torrent-checking-files.pngbin0 -> 633 bytes
-rw-r--r--themes/default/images/states/16/torrent-checking-resume-data.pngbin0 -> 469 bytes
-rw-r--r--themes/default/images/states/16/torrent-downloading-metadata.pngbin0 -> 712 bytes
-rw-r--r--themes/default/images/states/16/torrent-downloading.pngbin0 -> 580 bytes
-rw-r--r--themes/default/images/states/16/torrent-finished.pngbin0 -> 450 bytes
-rw-r--r--themes/default/images/states/16/torrent-paused.pngbin0 -> 369 bytes
-rw-r--r--themes/default/images/states/16/torrent-queued.pngbin0 -> 566 bytes
-rw-r--r--themes/default/images/states/16/torrent-seeding.pngbin0 -> 526 bytes
-rw-r--r--themes/default/images/vgrad_med_dark.pngbin0 -> 1908 bytes
-rw-r--r--themes/default/main.edc1033
40 files changed, 1218 insertions, 63 deletions
diff --git a/.gitignore b/.gitignore
index 9aeb9c5..9652dc8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
2build/ 2build/
3dist/ 3dist/
4MANIFEST 4MANIFEST
5data/themes \ No newline at end of file
diff --git a/AUTHORS b/AUTHORS
index febe5fc..a5f743a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,4 +1,5 @@
1Kai Huuhko <kai.huuhko@gmail.com> 1Kai Huuhko <kai.huuhko@gmail.com>
2Davide Andreoli <dave@gurumeditation.it> 2Davide Andreoli <dave@gurumeditation.it>
3 3
4Icons by swordplay <swordplay@gmail.com> from Bodhi Linux forums. 4Application icon by swordplay <swordplay@gmail.com> from Bodhi Linux forums.
5Other icons from IcoMoon - Free by Keyamoon (https://keyamoon.com) downloaded from https://icomoon.io \ No newline at end of file
diff --git a/data/icons/128x128/actions/session-pause.png b/data/icons/128x128/actions/session-pause.png
new file mode 100644
index 0000000..22d4716
--- /dev/null
+++ b/data/icons/128x128/actions/session-pause.png
Binary files differ
diff --git a/data/icons/128x128/actions/session-resume.png b/data/icons/128x128/actions/session-resume.png
new file mode 100644
index 0000000..b1aa6a4
--- /dev/null
+++ b/data/icons/128x128/actions/session-resume.png
Binary files differ
diff --git a/data/icons/128x128/actions/toolbar-new.png b/data/icons/128x128/actions/toolbar-new.png
new file mode 100644
index 0000000..93eaa38
--- /dev/null
+++ b/data/icons/128x128/actions/toolbar-new.png
Binary files differ
diff --git a/data/icons/128x128/actions/toolbar-quit.png b/data/icons/128x128/actions/toolbar-quit.png
new file mode 100644
index 0000000..37956f1
--- /dev/null
+++ b/data/icons/128x128/actions/toolbar-quit.png
Binary files differ
diff --git a/data/icons/128x128/actions/toolbar-settings.png b/data/icons/128x128/actions/toolbar-settings.png
new file mode 100644
index 0000000..beb3f70
--- /dev/null
+++ b/data/icons/128x128/actions/toolbar-settings.png
Binary files differ
diff --git a/data/icons/16x16/actions/session-pause.png b/data/icons/16x16/actions/session-pause.png
new file mode 100644
index 0000000..66f0fc2
--- /dev/null
+++ b/data/icons/16x16/actions/session-pause.png
Binary files differ
diff --git a/data/icons/16x16/actions/session-resume.png b/data/icons/16x16/actions/session-resume.png
new file mode 100644
index 0000000..db9f666
--- /dev/null
+++ b/data/icons/16x16/actions/session-resume.png
Binary files differ
diff --git a/data/icons/16x16/actions/toolbar-new.png b/data/icons/16x16/actions/toolbar-new.png
new file mode 100644
index 0000000..5dac0a9
--- /dev/null
+++ b/data/icons/16x16/actions/toolbar-new.png
Binary files differ
diff --git a/data/icons/16x16/actions/toolbar-quit.png b/data/icons/16x16/actions/toolbar-quit.png
new file mode 100644
index 0000000..7988d8f
--- /dev/null
+++ b/data/icons/16x16/actions/toolbar-quit.png
Binary files differ
diff --git a/data/icons/16x16/actions/toolbar-settings.png b/data/icons/16x16/actions/toolbar-settings.png
new file mode 100644
index 0000000..d4c073f
--- /dev/null
+++ b/data/icons/16x16/actions/toolbar-settings.png
Binary files differ
diff --git a/epour/gui/__init__.py b/epour/gui/__init__.py
index 89ed6c4..5d38d7c 100644
--- a/epour/gui/__init__.py
+++ b/epour/gui/__init__.py
@@ -19,6 +19,7 @@
19# MA 02110-1301, USA. 19# MA 02110-1301, USA.
20# 20#
21 21
22import os
22import cgi 23import cgi
23import logging 24import logging
24from datetime import timedelta, datetime 25from datetime import timedelta, datetime
@@ -38,8 +39,8 @@ from efl.elementary import Genlist, GenlistItemClass, \
38 ELM_GENLIST_ITEM_FIELD_TEXT, ELM_GENLIST_ITEM_FIELD_CONTENT, \ 39 ELM_GENLIST_ITEM_FIELD_TEXT, ELM_GENLIST_ITEM_FIELD_CONTENT, \
39 ELM_OBJECT_SELECT_MODE_NONE, ELM_OBJECT_SELECT_MODE_DEFAULT, \ 40 ELM_OBJECT_SELECT_MODE_NONE, ELM_OBJECT_SELECT_MODE_DEFAULT, \
40 ELM_LIST_COMPRESS 41 ELM_LIST_COMPRESS
41from efl.elementary import StandardWindow 42from efl.elementary import Window, Background, ELM_WIN_BASIC
42from efl.elementary import Icon 43from efl.elementary import Icon, Image
43from efl.elementary import Box 44from efl.elementary import Box
44from efl.elementary import Label 45from efl.elementary import Label
45from efl.elementary import Panel, ELM_PANEL_ORIENT_BOTTOM 46from efl.elementary import Panel, ELM_PANEL_ORIENT_BOTTOM
@@ -47,6 +48,10 @@ from efl.elementary import Table
47from efl.elementary import Menu 48from efl.elementary import Menu
48from efl.elementary import Configuration 49from efl.elementary import Configuration
49from efl.elementary import Toolbar, ELM_TOOLBAR_SHRINK_NONE 50from efl.elementary import Toolbar, ELM_TOOLBAR_SHRINK_NONE
51from efl.elementary import Theme
52from efl.elementary import Progressbar
53
54from xdg.BaseDirectory import load_data_paths
50 55
51from .Widgets import ConfirmExit, Error, Information, BlockGraph 56from .Widgets import ConfirmExit, Error, Information, BlockGraph
52 57
@@ -62,6 +67,14 @@ scale = elm_conf.scale
62 67
63log = logging.getLogger("epour.gui") 68log = logging.getLogger("epour.gui")
64 69
70theme_file = None
71
72for data_path in load_data_paths("epour"):
73 if os.path.exists(data_path):
74 if os.path.exists(os.path.join(data_path, "themes", "default.edj")):
75 theme_file = os.path.join(data_path, "themes", "default.edj")
76 break
77
65 78
66class MainInterface(object): 79class MainInterface(object):
67 80
@@ -71,11 +84,20 @@ class MainInterface(object):
71 84
72 self.torrentitems = {} 85 self.torrentitems = {}
73 86
74 win = self.win = StandardWindow( 87 theme = Theme.default_get()
75 "epour", "Epour", size=(480 * scale, 400 * scale), 88 theme.overlay_add(theme_file)
89 theme.extension_add(theme_file)
90
91 win = self.win = Window(
92 "epour", ELM_WIN_BASIC, size=(480 * scale, 400 * scale),
76 screen_constrain=True) 93 screen_constrain=True)
94 win.title = "Epour"
77 win.callback_delete_request_add(lambda x: self.quit()) 95 win.callback_delete_request_add(lambda x: self.quit())
78 96
97 bg = Background(win, size_hint_weight=EXPAND_BOTH, color=(0, 0, 0))
98 win.resize_object_add(bg)
99 bg.show()
100
79 mbox = Box(win, size_hint_weight=EXPAND_BOTH) 101 mbox = Box(win, size_hint_weight=EXPAND_BOTH)
80 win.resize_object_add(mbox) 102 win.resize_object_add(mbox)
81 mbox.show() 103 mbox.show()
@@ -88,7 +110,7 @@ class MainInterface(object):
88 tb.menu_parent = win 110 tb.menu_parent = win
89 111
90 item = tb.item_append( 112 item = tb.item_append(
91 "document-new", _("Add torrent"), 113 "toolbar-new", _("Add torrent"),
92 lambda x, y: self.add_torrent()) 114 lambda x, y: self.add_torrent())
93 115
94 def pause_session(it): 116 def pause_session(it):
@@ -100,10 +122,10 @@ class MainInterface(object):
100 del it.state 122 del it.state
101 123
102 item = tb.item_append( 124 item = tb.item_append(
103 "media-playback-pause", _("Pause Session"), 125 "session-pause", _("Pause Session"),
104 lambda tb, it: pause_session(it)) 126 lambda tb, it: pause_session(it))
105 item.state_add( 127 item.state_add(
106 "media-playback-start", _("Resume Session"), 128 "session-resume", _("Resume Session"),
107 lambda tb, it: resume_session(it)) 129 lambda tb, it: resume_session(it))
108 130
109 def prefs_general_cb(): 131 def prefs_general_cb():
@@ -118,19 +140,19 @@ class MainInterface(object):
118 from .Preferences import PreferencesSession 140 from .Preferences import PreferencesSession
119 PreferencesSession(self, self._session).show() 141 PreferencesSession(self, self._session).show()
120 142
121 item = tb.item_append("preferences-system", _("Preferences")) 143 item = tb.item_append("toolbar-settings", _("Preferences"))
122 item.menu = True 144 item.menu = True
123 item.menu.item_add( 145 item.menu.item_add(
124 None, _("General"), "preferences-system", 146 None, _("General"), "toolbar-settings",
125 lambda o, i: prefs_general_cb()) 147 lambda o, i: prefs_general_cb())
126 item.menu.item_add( 148 item.menu.item_add(
127 None, _("Proxy"), "preferences-system", 149 None, _("Proxy"), "toolbar-settings",
128 lambda o, i: prefs_proxy_cb()) 150 lambda o, i: prefs_proxy_cb())
129 item.menu.item_add( 151 item.menu.item_add(
130 None, _("Session"), "preferences-system", 152 None, _("Session"), "toolbar-settings",
131 lambda o, i: prefs_session_cb()) 153 lambda o, i: prefs_session_cb())
132 154
133 item = tb.item_append("application-exit", _("Exit"), 155 item = tb.item_append("toolbar-quit", _("Exit"),
134 lambda tb, it: self.quit()) 156 lambda tb, it: self.quit())
135 157
136 mbox.pack_start(tb) 158 mbox.pack_start(tb)
@@ -442,6 +464,12 @@ class TorrentClass(GenlistItemClass):
442 _('Downloading'), _('Finished'), _('Seeding'), _('Allocating'), 464 _('Downloading'), _('Finished'), _('Seeding'), _('Allocating'),
443 _('Checking resume data')) 465 _('Checking resume data'))
444 466
467 state_ic = (
468 "torrent-queued", "torrent-checking-files",
469 "torrent-downloading-metadata", "torrent-downloading",
470 "torrent-finished", "torrent-seeding", "torrent-allocating",
471 "torrent-checking-resume-data")
472
445 log = logging.getLogger("epour.gui.torrent_list") 473 log = logging.getLogger("epour.gui.torrent_list")
446 474
447 def __init__(self, session, *args, **kwargs): 475 def __init__(self, session, *args, **kwargs):
@@ -460,62 +488,79 @@ class TorrentClass(GenlistItemClass):
460 return '%s' % (torrent.status.name) 488 return '%s' % (torrent.status.name)
461 elif part == "elm.text.sub": 489 elif part == "elm.text.sub":
462 status = torrent.status 490 status = torrent.status
463 qp = handle.queue_position() 491 qp = status.queue_position
464 if qp == -1: 492 if qp == -1:
465 qp = "seeding" 493 qp = "seeding"
466 494
467 return _( 495 string = ""
468 "{0:.0%} complete, ETA: {1} "
469 "(Down: {2}/s Up: {3}/s Queue pos: {4})").format(
470 status.progress,
471 timedelta(seconds=self.get_eta(status)),
472 intrepr(status.download_payload_rate, precision=0),
473 intrepr(status.upload_payload_rate, precision=0),
474 qp)
475 496
476 def content_get(self, obj, part, item_data): 497 eta = self.get_eta(status)
477 if part != "elm.swallow.icon":
478 return
479 498
480 torrent = item_data 499 if eta:
481 handle = torrent.handle 500 # NOTE: Estimated Time of Arrival (time until the process is finished)
501 string += _("ETA: {0} ").format(timedelta(seconds=eta))
482 502
483 if not handle.is_valid(): 503 if not status.is_seeding:
484 return 504 string += _("Download: {0}/s ").format(intrepr(status.download_payload_rate, precision=0))
485 505
486 status = torrent.status 506 string += _("Upload: {0}/s ").format(intrepr(status.upload_payload_rate, precision=0))
487 state = torrent.state 507
488 ic = Icon(obj) 508 string += _("Queue position: {0}").format(qp)
489 try: 509
510 return string
511
512 def reusable_content_get(self, obj, part, item_data, old_content):
513 if part == "elm.swallow.icon":
514 torrent = item_data
515 handle = torrent.handle
516
517 if not handle.is_valid():
518 return
519
520 state = torrent.state
521 if old_content:
522 ic = old_content
523 else:
524 ic = Image(obj)
525 group = "states/" + self.state_ic[state]
526 ic.file_set(theme_file, group)
527 ic.tooltip_text_set(self.state_str[state])
528 ic.size_hint_aspect_set(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1)
529 return ic
530 elif part == "elm.swallow.end":
531 torrent = item_data
532 handle = torrent.handle
533
534 if not handle.is_valid():
535 return
536
537 status = torrent.status
538 if old_content:
539 ic = old_content
540 else:
541 ic = Image(obj)
542 group = "states/"
490 if status.paused: 543 if status.paused:
491 try: 544 group += "torrent-paused"
492 ic.standard = "player_pause"
493 except Exception:
494 try:
495 ic.standard = "media-playback-pause"
496 except Exception:
497 pass
498 elif status.is_seeding:
499 try:
500 ic.standard = "up"
501 except Exception:
502 try:
503 ic.standard = "arrow-up"
504 except Exception:
505 pass
506 else: 545 else:
507 try: 546 group += "torrent-active"
508 ic.standard = "down" 547 ic.file_set(theme_file, group)
509 except Exception: 548 return ic
510 try: 549 else:
511 ic.standard = "arrow-down" 550 torrent = item_data
512 except Exception: 551 handle = torrent.handle
513 pass 552
514 except RuntimeError: 553 if not handle.is_valid():
515 log.debug("Setting torrent ic failed") 554 return
516 ic.tooltip_text_set(self.state_str[state]) 555 status = torrent.status
517 ic.size_hint_aspect_set(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1) 556 if old_content:
518 return ic 557 pb = old_content
558 else:
559 pb = Progressbar(obj)
560 pb.style = "simple"
561 pb.unit_format = None
562 pb.value = status.progress
563 return pb
519 564
520 def get_eta(self, s): 565 def get_eta(self, s):
521 # if s.is_seeding and self.options["stop_at_ratio"]: 566 # if s.is_seeding and self.options["stop_at_ratio"]:
@@ -528,9 +573,12 @@ class TorrentClass(GenlistItemClass):
528 # s.all_time_upload 573 # s.all_time_upload
529 # ) / s.upload_payload_rate 574 # ) / s.upload_payload_rate
530 575
576 if s.download_payload_rate == 0:
577 return 0
578
531 left = s.total_wanted - s.total_wanted_done 579 left = s.total_wanted - s.total_wanted_done
532 580
533 if left <= 0 or s.download_payload_rate == 0: 581 if left <= 0:
534 return 0 582 return 0
535 583
536 eta = int(round(left / s.download_payload_rate)) 584 eta = int(round(left / s.download_payload_rate))
diff --git a/setup.py b/setup.py
index 205926a..eee6b85 100755
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,9 @@
1#!/usr/bin/env python 1#!/usr/bin/env python
2 2
3import os
4import distutils
5from distutils.command.build import build
6from distutils.log import warn, info, error
3from DistUtilsExtra import auto 7from DistUtilsExtra import auto
4 8
5from epour import __version__ 9from epour import __version__
@@ -8,6 +12,73 @@ from epour import __version__
8class sdist_auto(auto.sdist_auto): 12class sdist_auto(auto.sdist_auto):
9 filter_suffix = ['.pyc', '.mo', '~', '.swp', '-workspace', '-project'] 13 filter_suffix = ['.pyc', '.mo', '~', '.swp', '-workspace', '-project']
10 14
15
16def _data_files_append(distribution, target, files):
17 """ Tiny util to append to data_files, ensuring data_file is defined """
18 if not isinstance(files, (list, tuple)):
19 files = [files]
20 if distribution.data_files is None:
21 data_files = distribution.data_files = []
22 else:
23 data_files = distribution.data_files
24 data_files.append((target, files))
25
26
27class build_edc(distutils.cmd.Command):
28 description = 'compile all the edje themes using edje_cc'
29 user_options = [('themes-dir=', 'd', 'directory that holds the themes '
30 '(default: data/themes)'),
31 ('main-name=', 'n', 'main edc file name of the themes '
32 '(default: main.edc)')]
33
34 def initialize_options(self):
35 self.themes_dir = None
36 self.main_name = None
37
38 def finalize_options(self):
39 if self.themes_dir is None:
40 self.themes_dir = 'themes'
41 if self.main_name is None:
42 self.main_name = 'main.edc'
43
44 def run(self):
45 distutils.dir_util.mkpath('data/themes', verbose=False)
46 for name in os.listdir(self.themes_dir):
47 edc_file = os.path.join(self.themes_dir, name, self.main_name)
48 if os.path.isfile(edc_file):
49 self.compile_theme(name, edc_file)
50
51 def compile_theme(self, name, edc_file):
52 """
53 Compile edc file to using edje_cc, and put the generated theme file
54 in the data_files list so it got installed.
55 """
56 theme_dir = os.path.dirname(edc_file)
57 sources = []
58 for root, dirs, files in os.walk(theme_dir):
59 sources.extend( os.path.join(root, name) for name in files )
60
61 edj_file = os.path.join('data', 'themes', '%s.edj' % name)
62 if distutils.dep_util.newer_group(sources, edj_file):
63 info('compiling theme "%s" from edc file: "%s"' % (name, edc_file))
64 cmd = ['edje_cc', '-v',
65 '-id', theme_dir, '-id', os.path.join(theme_dir, 'images'),
66 '-fd', theme_dir, '-fd', os.path.join(theme_dir, 'fonts'),
67 '-sd', theme_dir, '-sd', os.path.join(theme_dir, 'sounds'),
68 edc_file, edj_file]
69 self.spawn(cmd)
70
71 info("changing mode of %s to 644", edj_file)
72 os.chmod(edj_file, 0o0644) # stupid edje_cc create files as 0600 :/
73
74 target = os.path.join('share', self.distribution.get_name(), 'themes')
75 _data_files_append(self.distribution, target, edj_file)
76
77def has_themes(bar):
78 return True
79
80build.sub_commands.append(('build_edc', has_themes))
81
11auto.setup( 82auto.setup(
12 name='epour', 83 name='epour',
13 version=__version__, 84 version=__version__,
@@ -30,6 +101,7 @@ auto.setup(
30 'dbus', 101 'dbus',
31 ], 102 ],
32 cmdclass={ 103 cmdclass={
33 'sdist': sdist_auto 104 'sdist': sdist_auto,
34 } 105 'build_edc': build_edc,
106 },
35) 107)
diff --git a/themes/default/images/bevel_curved_horiz_out.png b/themes/default/images/bevel_curved_horiz_out.png
new file mode 100644
index 0000000..75426a2
--- /dev/null
+++ b/themes/default/images/bevel_curved_horiz_out.png
Binary files differ
diff --git a/themes/default/images/bevel_horiz_out.png b/themes/default/images/bevel_horiz_out.png
new file mode 100644
index 0000000..38784d7
--- /dev/null
+++ b/themes/default/images/bevel_horiz_out.png
Binary files differ
diff --git a/themes/default/images/shadow_rounded_horiz.png b/themes/default/images/shadow_rounded_horiz.png
new file mode 100644
index 0000000..5030a08
--- /dev/null
+++ b/themes/default/images/shadow_rounded_horiz.png
Binary files differ
diff --git a/themes/default/images/shine.png b/themes/default/images/shine.png
new file mode 100644
index 0000000..e433c02
--- /dev/null
+++ b/themes/default/images/shine.png
Binary files differ
diff --git a/themes/default/images/states/128/torrent-active.png b/themes/default/images/states/128/torrent-active.png
new file mode 100644
index 0000000..b33e389
--- /dev/null
+++ b/themes/default/images/states/128/torrent-active.png
Binary files differ
diff --git a/themes/default/images/states/128/torrent-allocating.png b/themes/default/images/states/128/torrent-allocating.png
new file mode 100644
index 0000000..2822bd2
--- /dev/null
+++ b/themes/default/images/states/128/torrent-allocating.png
Binary files differ
diff --git a/themes/default/images/states/128/torrent-checking-files.png b/themes/default/images/states/128/torrent-checking-files.png
new file mode 100644
index 0000000..f31b94e
--- /dev/null
+++ b/themes/default/images/states/128/torrent-checking-files.png
Binary files differ
diff --git a/themes/default/images/states/128/torrent-checking-resume-data.png b/themes/default/images/states/128/torrent-checking-resume-data.png
new file mode 100644
index 0000000..f6bd9e1
--- /dev/null
+++ b/themes/default/images/states/128/torrent-checking-resume-data.png
Binary files differ
diff --git a/themes/default/images/states/128/torrent-downloading-metadata.png b/themes/default/images/states/128/torrent-downloading-metadata.png
new file mode 100644
index 0000000..e454cdb
--- /dev/null
+++ b/themes/default/images/states/128/torrent-downloading-metadata.png
Binary files differ
diff --git a/themes/default/images/states/128/torrent-downloading.png b/themes/default/images/states/128/torrent-downloading.png
new file mode 100644
index 0000000..6247659
--- /dev/null
+++ b/themes/default/images/states/128/torrent-downloading.png
Binary files differ
diff --git a/themes/default/images/states/128/torrent-finished.png b/themes/default/images/states/128/torrent-finished.png
new file mode 100644
index 0000000..c2ff5e4
--- /dev/null
+++ b/themes/default/images/states/128/torrent-finished.png
Binary files differ
diff --git a/themes/default/images/states/128/torrent-paused.png b/themes/default/images/states/128/torrent-paused.png
new file mode 100644
index 0000000..50cd4bc
--- /dev/null
+++ b/themes/default/images/states/128/torrent-paused.png
Binary files differ
diff --git a/themes/default/images/states/128/torrent-queued.png b/themes/default/images/states/128/torrent-queued.png
new file mode 100644
index 0000000..9b197ae
--- /dev/null
+++ b/themes/default/images/states/128/torrent-queued.png
Binary files differ
diff --git a/themes/default/images/states/128/torrent-seeding.png b/themes/default/images/states/128/torrent-seeding.png
new file mode 100644
index 0000000..9192664
--- /dev/null
+++ b/themes/default/images/states/128/torrent-seeding.png
Binary files differ
diff --git a/themes/default/images/states/16/torrent-active.png b/themes/default/images/states/16/torrent-active.png
new file mode 100644
index 0000000..64c8c33
--- /dev/null
+++ b/themes/default/images/states/16/torrent-active.png
Binary files differ
diff --git a/themes/default/images/states/16/torrent-allocating.png b/themes/default/images/states/16/torrent-allocating.png
new file mode 100644
index 0000000..9b37fb4
--- /dev/null
+++ b/themes/default/images/states/16/torrent-allocating.png
Binary files differ
diff --git a/themes/default/images/states/16/torrent-checking-files.png b/themes/default/images/states/16/torrent-checking-files.png
new file mode 100644
index 0000000..a829295
--- /dev/null
+++ b/themes/default/images/states/16/torrent-checking-files.png
Binary files differ
diff --git a/themes/default/images/states/16/torrent-checking-resume-data.png b/themes/default/images/states/16/torrent-checking-resume-data.png
new file mode 100644
index 0000000..4a03ed3
--- /dev/null
+++ b/themes/default/images/states/16/torrent-checking-resume-data.png
Binary files differ
diff --git a/themes/default/images/states/16/torrent-downloading-metadata.png b/themes/default/images/states/16/torrent-downloading-metadata.png
new file mode 100644
index 0000000..64c83a2
--- /dev/null
+++ b/themes/default/images/states/16/torrent-downloading-metadata.png
Binary files differ
diff --git a/themes/default/images/states/16/torrent-downloading.png b/themes/default/images/states/16/torrent-downloading.png
new file mode 100644
index 0000000..4dae99e
--- /dev/null
+++ b/themes/default/images/states/16/torrent-downloading.png
Binary files differ
diff --git a/themes/default/images/states/16/torrent-finished.png b/themes/default/images/states/16/torrent-finished.png
new file mode 100644
index 0000000..287f204
--- /dev/null
+++ b/themes/default/images/states/16/torrent-finished.png
Binary files differ
diff --git a/themes/default/images/states/16/torrent-paused.png b/themes/default/images/states/16/torrent-paused.png
new file mode 100644
index 0000000..c2d775f
--- /dev/null
+++ b/themes/default/images/states/16/torrent-paused.png
Binary files differ
diff --git a/themes/default/images/states/16/torrent-queued.png b/themes/default/images/states/16/torrent-queued.png
new file mode 100644
index 0000000..f4690ca
--- /dev/null
+++ b/themes/default/images/states/16/torrent-queued.png
Binary files differ
diff --git a/themes/default/images/states/16/torrent-seeding.png b/themes/default/images/states/16/torrent-seeding.png
new file mode 100644
index 0000000..0723412
--- /dev/null
+++ b/themes/default/images/states/16/torrent-seeding.png
Binary files differ
diff --git a/themes/default/images/vgrad_med_dark.png b/themes/default/images/vgrad_med_dark.png
new file mode 100644
index 0000000..8543044
--- /dev/null
+++ b/themes/default/images/vgrad_med_dark.png
Binary files differ
diff --git a/themes/default/main.edc b/themes/default/main.edc
new file mode 100644
index 0000000..aca4c04
--- /dev/null
+++ b/themes/default/main.edc
@@ -0,0 +1,1033 @@
1externals.external: "elm";
2
3#define FN_COL_DEFAULT 255 255 255 255; color3: 0 0 0 128
4#define FN_COL_HIGHLIGHT 51 153 255 255; color2: 51 153 255 24; color3: 51 153 255 18
5#define FN_COL_DISABLE 21 21 21 255; color3: 255 255 255 25;
6#define FN_COL_DISABLE_LIGHTER_SHADOW 21 21 21 255; color3: 255 255 255 15
7#define FN_COL_HIGHLIGHT_CLICKED 255 255 255 255; color2: 51 153 255 64; color3: 51 153 255 32
8
9
10#define ODD(_NAME, _SRC) \
11 group { _NAME; \
12 inherit: _SRC; \
13 parts { \
14 rect { "base"; \
15 desc { "default"; \
16 color: 56 56 56 255; \
17 color_class: "list_item_base_odd"; \
18 } \
19 } \
20 } \
21 }
22#define COMPRESS_SUB(_NAME, _SRC) \
23 group { name: _NAME; \
24 inherit: _SRC; \
25 parts { \
26 text { "elm.text"; \
27 desc { "default"; \
28 text.min: 0 1; \
29 } \
30 desc { "selected"; \
31 text.min: 0 1; \
32 } \
33 desc { "disabled"; \
34 text.min: 0 1; \
35 } \
36 desc { "flip_enabled"; \
37 text.min: 0 1; \
38 } \
39 } \
40 text { "label2"; \
41 desc { "default"; \
42 text.min: 0 1; \
43 } \
44 desc { "selected"; \
45 text.min: 0 1; \
46 } \
47 desc { "disabled"; \
48 text.min: 0 1; \
49 } \
50 desc { "flip_enabled"; \
51 text.min: 0 1; \
52 } \
53 } \
54 text { "label3"; \
55 desc { "default"; \
56 text.min: 0 1; \
57 } \
58 desc { "selected"; \
59 text.min: 0 1; \
60 } \
61 desc { "disabled"; \
62 text.min: 0 1; \
63 } \
64 desc { "flip_enabled"; \
65 text.min: 0 1; \
66 } \
67 } \
68 text { "elm.text.sub"; \
69 desc { "default"; \
70 text.min: 0 1; \
71 } \
72 desc { "selected"; \
73 text.min: 0 1; \
74 } \
75 desc { "disabled"; \
76 text.min: 0 1; \
77 } \
78 desc { "flip_enabled"; \
79 text.min: 0 1; \
80 } \
81 } \
82 text { "label4"; \
83 desc { "default"; \
84 text.min: 0 1; \
85 } \
86 desc { "selected"; \
87 text.min: 0 1; \
88 } \
89 desc { "disabled"; \
90 text.min: 0 1; \
91 } \
92 desc { "flip_enabled"; \
93 text.min: 0 1; \
94 } \
95 } \
96 text { "label5"; \
97 desc { "default"; \
98 fixed: 0 1; \
99 text.min: 0 1; \
100 } \
101 desc { "selected"; \
102 text.min: 0 1; \
103 } \
104 desc { "disabled"; \
105 text.min: 0 1; \
106 } \
107 desc { "flip_enabled"; \
108 text.min: 0 1; \
109 } \
110 } \
111 } \
112 }
113#define COMPRESS_SUB_ODD(_NAME, _SRC) \
114 group { name: _NAME; \
115 inherit: _SRC; \
116 parts { \
117 text { "elm.text"; \
118 desc { "default"; \
119 text.min: 0 1; \
120 } \
121 desc { "selected"; \
122 text.min: 0 1; \
123 } \
124 desc { "disabled"; \
125 text.min: 0 1; \
126 } \
127 desc { "flip_enabled"; \
128 text.min: 0 1; \
129 } \
130 } \
131 text { "label2"; \
132 desc { "default"; \
133 text.min: 0 1; \
134 } \
135 desc { "selected"; \
136 text.min: 0 1; \
137 } \
138 desc { "disabled"; \
139 text.min: 0 1; \
140 } \
141 desc { "flip_enabled"; \
142 text.min: 0 1; \
143 } \
144 } \
145 text { "label3"; \
146 desc { "default"; \
147 text.min: 0 1; \
148 } \
149 desc { "selected"; \
150 text.min: 0 1; \
151 } \
152 desc { "disabled"; \
153 text.min: 0 1; \
154 } \
155 desc { "flip_enabled"; \
156 text.min: 0 1; \
157 } \
158 } \
159 text { "elm.text.sub"; \
160 desc { "default"; \
161 text.min: 0 1; \
162 } \
163 desc { "selected"; \
164 text.min: 0 1; \
165 } \
166 desc { "disabled"; \
167 text.min: 0 1; \
168 } \
169 desc { "flip_enabled"; \
170 text.min: 0 1; \
171 } \
172 } \
173 text { "label4"; \
174 desc { "default"; \
175 text.min: 0 1; \
176 } \
177 desc { "selected"; \
178 text.min: 0 1; \
179 } \
180 desc { "disabled"; \
181 text.min: 0 1; \
182 } \
183 desc { "flip_enabled"; \
184 text.min: 0 1; \
185 } \
186 } \
187 text { "label5"; \
188 desc { "default"; \
189 text.min: 0 1; \
190 } \
191 desc { "selected"; \
192 text.min: 0 1; \
193 } \
194 desc { "disabled"; \
195 text.min: 0 1; \
196 } \
197 desc { "flip_enabled"; \
198 text.min: 0 1; \
199 } \
200 } \
201 rect { "base"; \
202 desc { "default"; \
203 color: 56 56 56 255; \
204 color_class: "list_item_base_odd"; \
205 } \
206 } \
207 } \
208 }
209
210
211#define ASPECT_FILL(_ASPECT) \
212 aspect: _ASPECT _ASPECT; aspect_preference: NONE;
213
214#define TILED_PATTERN(_WIDTH, _HEIGHT) \
215 fill { size { relative: 0.0 0.0; offset: _WIDTH _HEIGHT; } }
216
217#define TILED_HORIZ(_WIDTH) \
218 fill { size { relative: 0.0 1.0; offset: _WIDTH 0; } }
219
220#define TILED_VERT(_HEIGHT) \
221 fill { size { relative: 1.0 0.0; offset: 0 _HEIGHT; } }
222
223#define FIXED_SIZE(_WIDTH, _HEIGHT) \
224 min: _WIDTH _HEIGHT; max: _WIDTH _HEIGHT; fixed: 1 1;
225
226
227#define ICO2(Cat, Name) \
228 group { name: ##Cat##"/"##Name##; \
229 min: 16 16; \
230 images { \
231 set { name: ##Name##; \
232 image { \
233 image: ##Cat##"/16/"##Name##".png" COMP; \
234 size: 0 0 22 22; \
235 } \
236 image { \
237 image: ##Cat##"/128/"##Name##".png" COMP; \
238 size: 23 23 256 256; \
239 } \
240 } \
241 } \
242 parts { \
243 part { name: "base"; \
244 desc { \
245 image.normal: ##Name##; \
246 aspect: 1.0 1.0; aspect_preference: BOTH; \
247 } } } }
248
249
250collections {
251
252 ICO2("states", "torrent-queued")
253 ICO2("states", "torrent-checking-files")
254 ICO2("states", "torrent-downloading-metadata")
255 ICO2("states", "torrent-downloading")
256 ICO2("states", "torrent-finished")
257 ICO2("states", "torrent-seeding")
258 ICO2("states", "torrent-allocating")
259 ICO2("states", "torrent-checking-resume-data")
260
261 ICO2("states", "torrent-paused")
262 ICO2("states", "torrent-active")
263
264
265 group { name: "elm/progressbar/horizontal/simple";
266 parts {
267 part { name: "elm.background.progressbar"; type: RECT;
268 mouse_events: 0;
269 description {
270 state: "default" 0.0;
271 rel1 {
272 relative: 0.0 0.0;
273 offset: 0 0;
274 }
275 rel2 {
276 relative: 1.0 1.0;
277 }
278 }
279 }
280 part { name: "elm.swallow.bar";
281 mouse_events: 0;
282 type: SWALLOW;
283 description {
284 min: 48 24;
285 max: 99999 100;
286 state: "default" 0.0;
287 rel1 {
288 to: "elm.background.progressbar";
289 relative: 0.0 0.0;
290 }
291 rel2 {
292 to: "elm.background.progressbar";
293 relative: 1.0 1.0;
294 }
295 }
296 }
297 part { name: "elm.swallow.content";
298 type: SWALLOW;
299 description { state: "default" 0.0;
300 visible: 0;
301 align: 0.0 0.5;
302 rel1 {
303 offset: 4 0;
304 to_y: "elm.background.progressbar";
305 }
306 rel2 {
307 offset: 3 -1;
308 relative: 0.0 1.0;
309 to_y: "elm.background.progressbar";
310 }
311 }
312 description { state: "visible" 0.0;
313 inherit: "default" 0.0;
314 visible: 1;
315 aspect: 1.0 1.0;
316 aspect_preference: VERTICAL;
317 rel2.offset: 4 -1;
318 }
319 }
320 // part { name: "elm.text";
321 // type: TEXT;
322 // mouse_events: 0;
323 // scale: 1;
324 // description { state: "default" 0.0;
325 // visible: 0;
326 // fixed: 1 1;
327 // align: 0.0 0.5;
328 // rel1.to_x: "elm.swallow.content";
329 // rel1.relative: 1.0 0.0;
330 // rel1.offset: -1 4;
331 // rel2.to_x: "elm.swallow.content";
332 // rel2.relative: 1.0 1.0;
333 // rel2.offset: -1 -5;
334 // color: 0 0 0 255;
335 // text {
336 // //font: "Sans,Edje-Vera";
337 // size: 10;
338 // min: 0 0;
339 // align: 0.0 0.5;
340 // }
341 // }
342 // description { state: "visible" 0.0;
343 // inherit: "default" 0.0;
344 // visible: 1;
345 // text.min: 1 1;
346 // rel1.offset: 0 4;
347 // rel2.offset: 0 -5;
348 // }
349 // }
350
351 part { name: "background"; type: RECT;
352 mouse_events: 0;
353 clip_to: "elm.background.progressbar";
354 description {
355 state: "default" 0.0;
356 rel1 {
357 to: "elm.swallow.bar";
358 relative: 0.0 0.0;
359 }
360 rel2 {
361 to: "elm.swallow.bar";
362 relative: 1.0 1.0;
363 offset: -1 -1;
364 }
365 color: 0 0 0 0;
366 }
367 }
368
369 part { name: "elm.progress.progressbar"; type: RECT;
370 mouse_events: 0;
371 clip_to: "elm.background.progressbar";
372 description {
373 state: "default" 0.0;
374 rel1 {
375 to: "elm.swallow.bar";
376 relative: 0.0 0.0;
377 offset: 1 1;
378 }
379 rel2 {
380 to_y: "elm.swallow.bar";
381 to_x: "elm.cur.progressbar";
382 offset: -2 -2;
383 }
384 color: 32 32 64 160;
385 }
386 description {
387 state: "invert" 0.0;
388 inherit: "default" 0.0;
389 rel1 {
390 to_y: "elm.swallow.bar";
391 to_x: "elm.cur.progressbar";
392 relative: 1.0 0.0;
393 }
394 rel2 {
395 to: "elm.swallow.bar";
396 relative: 1.0 1.0;
397 }
398 }
399 description {
400 state: "state_begin" 0.0;
401 inherit: "default" 0.0;
402 rel1 {
403 to: "elm.swallow.bar";
404 relative: 0.0 0.0;
405 }
406 rel2 {
407 to: "elm.swallow.bar";
408 relative: 0.1 1.0;
409 }
410 }
411 description {
412 state: "state_end" 0.0;
413 inherit: "default" 0.0;
414 rel1 {
415 to: "elm.swallow.bar";
416 relative: 0.9 0.0;
417 }
418 rel2 {
419 to: "elm.swallow.bar";
420 relative: 1.0 1.0;
421 }
422 }
423 }
424
425 part { name: "elm.cur.progressbar";
426 mouse_events: 0;
427 dragable {
428 confine: "background";
429 x: 1 1 1;
430 y: 0 0 0;
431 }
432 description { state: "default" 0.0;
433 visible: 0;
434 rel1 {
435 to: "background";
436 relative: 0 0;
437 }
438 rel2.to: "background";
439 }
440 }
441 // part { name: "elm.text.box"; type: RECT;
442 // mouse_events: 0;
443 // description { state: "default" 0.0;
444 // visible: 1;
445 // rel1 {
446 // to: "elm.text.content";
447 // offset: -6 -4;
448 // }
449 // rel2 {
450 // to: "elm.text.content";
451 // offset: 6 4;
452 // }
453 // color: 0 0 0 0;
454 // // image {
455 // // normal: "bt_basew.png";
456 // // border: 8 8 8 8;
457 // // }
458 // //fill.smooth: 0;
459 // }
460 // description { state: "hidden" 0.0;
461 // inherit: "default" 0.0;
462 // visible: 0;
463 // }
464 // }
465 // part { name: "elm.text.content";
466 // type: TEXT;
467 // mouse_events: 0;
468 // description { state: "default" 0.0;
469 // fixed: 1 1;
470 // visible: 1;
471 // rel1 {
472 // to: "background";
473 // relative: 0.5 0.5;
474 // offset: -3 -1;
475 // }
476 // rel2 {
477 // to: "background";
478 // relative: 0.5 0.5;
479 // offset: 3 -1;
480 // }
481 // text {
482 // //font: "Sans,Edje-Vera";
483 // size: 10;
484 // min: 1 1;
485 // align: 0.5 0.0;
486 // }
487 // color: 0 0 0 255;
488 // }
489 // description { state: "hidden" 0.0;
490 // inherit: "default" 0.0;
491 // visible: 0;
492 // text.min: 0 0;
493 // }
494 // }
495 }
496 programs {
497 // program { name: "label_show";
498 // signal: "elm,state,text,visible";
499 // source: "elm";
500 // action: STATE_SET "visible" 0.0;
501 // target: "elm.text";
502 // }
503 // program { name: "label_hide";
504 // signal: "elm,state,text,hidden";
505 // source: "elm";
506 // action: STATE_SET "default" 0.0;
507 // target: "elm.text";
508 // }
509 program { name: "icon_show";
510 signal: "elm,state,icon,visible";
511 source: "elm";
512 action: STATE_SET "visible" 0.0;
513 target: "elm.swallow.content";
514 }
515 program { name: "icon_hide";
516 signal: "elm,state,icon,hidden";
517 source: "elm";
518 action: STATE_SET "default" 0.0;
519 target: "elm.swallow.content";
520 }
521 // program { name: "units_show";
522 // signal: "elm,state,units,visible";
523 // source: "elm";
524 // action: STATE_SET "default" 0.0;
525 // target: "elm.text.content";
526 // target: "elm.text.box";
527 // }
528 // program { name: "units_hide";
529 // signal: "elm,state,units,hidden";
530 // source: "elm";
531 // action: STATE_SET "hidden" 0.0;
532 // target: "elm.text.content";
533 // target: "elm.text.box";
534 // }
535 // program { name: "slide_to_end";
536 // action: STATE_SET "state_end" 0.0;
537 // transition: LINEAR 0.5;
538 // target: "elm.progress.progressbar";
539 // after: "slide_to_begin";
540 // }
541 // program { name: "slide_to_begin";
542 // signal: "elm,state,slide,begin";
543 // action: STATE_SET "state_begin" 0.0;
544 // target: "elm.progress.progressbar";
545 // transition: LINEAR 0.5;
546 // after: "slide_to_end";
547 // }
548 program { name: "start_pulse";
549 signal: "elm,state,pulse,start";
550 source: "elm";
551 // after: "slide_to_end";
552 }
553 program { name: "stop_pulse";
554 signal: "elm,state,pulse,stop";
555 source: "elm";
556 action: ACTION_STOP;
557 // target: "slide_to_begin";
558 // target: "slide_to_end";
559 target: "start_pulse";
560 after: "state_pulse";
561 }
562 program { name: "state_pulse";
563 signal: "elm,state,pulse";
564 source: "elm";
565 action: STATE_SET "state_begin" 0.0;
566 target: "elm.progress.progressbar";
567 // after: "units_hide";
568 }
569 program { name: "state_fraction";
570 signal: "elm,state,fraction";
571 source: "elm";
572 action: ACTION_STOP;
573 // target: "slide_to_begin";
574 // target: "slide_to_end";
575 target: "start_pulse";
576 action: STATE_SET "default" 0.0;
577 target: "elm.progress.progressbar";
578 }
579 program { name: "set_invert_on";
580 signal: "elm,state,inverted,on";
581 source: "elm";
582 action: STATE_SET "invert" 0.0;
583 target: "elm.progress.progressbar";
584 }
585 program { name: "set_invert_off";
586 signal: "elm,state,inverted,off";
587 source: "elm";
588 action: STATE_SET "default" 0.0;
589 target: "elm.progress.progressbar";
590 }
591 }
592 }
593
594
595 group { "genlist_base"; inherit_only: 1; nomouse; program_source: "elm";
596 images.image: "bevel_curved_horiz_out.png" COMP;
597 images.image: "shadow_rounded_horiz.png" COMP;
598 images.image: "vgrad_med_dark.png" COMP;
599 images.image: "bevel_horiz_out.png" COMP;
600 target_group: "default" "elm.text" "label2" "label3";
601 parts {
602 rect { "event"; mouse;
603 desc { "default";
604 color: 0 0 0 0;
605 link.base: "elm,state,enabled";
606 }
607 desc { "disabled";
608 inherit: "default";
609 hid;
610 link.base: "elm,state,disabled";
611 }
612 }
613 rect { "base";
614 desc { "default";
615 color: 64 64 64 128;
616 color_class: "list_item_base";
617 link.base: "elm,state,even";
618 }
619 desc { "odd";
620 color: 56 56 56 128;
621 color_class: "list_item_base_odd";
622 link.base: "elm,state,odd";
623 }
624 }
625 image { "bevel";
626 desc { "default";
627 image.normal: "bevel_curved_horiz_out.png";
628 image.border: 0 0 2 2;
629 image.middle: 0;
630 fill.smooth: 0;
631 }
632 }
633 image { "sel_shadow";
634 desc { "default";
635 image.normal: "shadow_rounded_horiz.png";
636 image.border: 0 0 9 9;
637 rel1.offset: 0 -4;
638 rel2.offset: -1 5;
639 fill.smooth: 0;
640 link.base: "elm,state,unselected";
641 hid;
642 }
643 desc { "selected";
644 inherit: "default";
645 link.base: "elm,state,selected";
646 vis;
647 }
648 }
649 image { "sel_base";
650 desc { "default";
651 image.normal: "vgrad_med_dark.png";
652 fill.smooth: 0;
653 hid;
654 TILED_HORIZ(120)
655 link.base: "elm,state,unselected";
656 }
657 desc { "selected";
658 inherit: "default";
659 link.base: "elm,state,selected";
660 vis;
661 }
662 }
663 image { "sel_bevel";
664 desc { "default";
665 image.normal: "bevel_horiz_out.png";
666 image.border: 0 0 2 2;
667 image.middle: 0;
668 fill.smooth: 0;
669 link.base: "elm,state,unselected";
670 hid;
671 }
672 desc { "selected";
673 inherit: "default";
674 link.base: "elm,state,selected";
675 vis;
676 }
677 }
678 }
679 }
680
681 group { "genlist_top"; inherit_only: 1; nomouse; program_source: "elm";
682 images.image: "shine.png" COMP;
683 parts {
684 image { "sel_shine";
685 desc { "default";
686 image.normal: "shine.png";
687 rel1.offset: 0 -2;
688 rel1.to: "sel_base";
689 rel2.relative: 1.0 0.0;
690 rel2.offset: -1 2;
691 rel2.to: "sel_base";
692 hid;
693 FIXED_SIZE(69, 5)
694 link.base: "elm,state,unselected";
695 }
696 desc { "selected";
697 inherit: "default";
698 vis;
699 link.base: "elm,state,selected";
700 }
701 }
702 rect { "event_block"; mouse;
703 desc { "default";
704 color: 0 0 0 0;
705 hid;
706 link.base: "elm,state,enabled";
707 }
708 desc { "disabled";
709 inherit: "default";
710 vis;
711 link.base: "elm,state,disabled";
712 }
713 }
714 }
715 }
716
717
718#define TREEPAD 19
719
720
721 group { "elm/genlist/item/double_label/default"; nomouse;
722 data.item: "selectraise" "on";
723 data.item: "focusraise" "on";
724 data.item: "texts" "elm.text elm.text.sub";
725 data.item: "contents" "elm.swallow.progress elm.swallow.icon elm.swallow.end";
726 data.item: "treesize" TREEPAD;
727 data.item: "flips" "elm.text.flip";
728 inherit: "genlist_base";
729 parts {
730
731 swallow { "elm.swallow.progress"; nomouse;
732 desc { "default";
733 fixed: 1 0;
734 align: 0.0 0.5;
735 //rel1.relative: 1.0 0.0;
736 //rel1.offset: -1 2;
737 //rel2.relative: 1.0 1.0;
738 //rel2.offset: -1 -3;
739 link.base: "elm,state,flip,disabled";
740 }
741 desc { "flip_enabled";
742 inherit: "default";
743 hid;
744 link.base: "elm,state,flip,enabled";
745 }
746 }
747
748 //##//
749 text { "elm.text";
750 effect: SHADOW BOTTOM;
751 scale;
752 desc { "default";
753 rel1.offset: 2 3;
754 rel1.relative: 1.0 0.0;
755 rel1.to_x: "elm.swallow.icon";
756 rel2.offset: -3 -3;
757 rel2.relative: 0.0 0.0;
758 rel2.to_x: "elm.swallow.end";
759 rel2.to_y: "elm.text.sub";
760 color: FN_COL_DEFAULT;
761 color_class: "list_item";
762 align: 0.0 0.0;
763 text { font: FN; size: 10;
764 min: 1 1;
765 ellipsis: -1;
766 align: 0.0 0.0;
767 text_class: "list_item";
768 }
769 }
770 desc { "selected";
771 inherit: "default";
772 hid;
773 }
774 desc { "disabled";
775 inherit: "default";
776 hid;
777 }
778 desc { "flip_enabled";
779 inherit: "default";
780 hid;
781 }
782 }
783 text { "label2";
784 effect: SHADOW BOTTOM;
785 scale;
786 desc { "default";
787 rel1.to: "elm.text";
788 rel2.to: "elm.text";
789 color: FN_COL_DISABLE;
790 color_class: "list_item_disabled";
791 text { font: FN; size: 10;
792 text_source: "elm.text";
793 align: 0.0 0.5;
794 text_class: "list_item";
795 }
796 hid;
797 }
798 desc { "selected";
799 inherit: "default";
800 hid;
801 }
802 desc { "disabled";
803 inherit: "default";
804 vis;
805 }
806 desc { "flip_enabled";
807 inherit: "default";
808 hid;
809 }
810 }
811 text { "label3";
812 effect: GLOW;
813 scale;
814 desc { "default";
815 rel1.offset: -2 -3;
816 rel1.to: "elm.text";
817 rel2.offset: -1 1;
818 rel2.to: "elm.text";
819 color: FN_COL_HIGHLIGHT;
820 color_class: "list_item_selected";
821 text { font: FN; size: 10;
822 text_source: "elm.text";
823 align: 0.0 0.5;
824 text_class: "list_item";
825 }
826 hid;
827 }
828 desc { "selected";
829 inherit: "default";
830 vis;
831 }
832 desc { "disabled";
833 inherit: "default";
834 hid;
835 }
836 desc { "flip_enabled";
837 inherit: "default";
838 hid;
839 }
840 }
841 swallow { "elm.text.flip"; mouse;
842 scale;
843 desc { "default";
844 hid;
845 rel1.to_y: "elm.text";
846 rel2.to_y: "elm.text";
847 }
848 desc { "flip_enabled";
849 inherit: "default";
850 vis;
851 }
852 }
853 text { "elm.text.sub";
854 effect: SHADOW BOTTOM;
855 scale;
856 desc { "default";
857 fixed: 0 1;
858 rel1.offset: 2 -3;
859 rel1.relative: 1.0 1.0;
860 rel1.to_x: "elm.swallow.icon";
861 rel2.offset: -3 -3;
862 rel2.relative: 0.0 1.0;
863 rel2.to_x: "elm.swallow.end";
864 color: FN_COL_DEFAULT;
865 color_class: "list_item_sub";
866 align: 0.0 1.0;
867 text { font: FN; size: 8;
868 min: 1 1;
869 ellipsis: -1;
870 align: 0.0 1.0;
871 text_class: "list_item_sub";
872 }
873 }
874 desc { "selected";
875 inherit: "default";
876 hid;
877 }
878 desc { "disabled";
879 inherit: "default";
880 hid;
881 }
882 desc { "flip_enabled";
883 inherit: "default";
884 hid;
885 }
886 }
887 text { "label4";
888 effect: SHADOW BOTTOM;
889 scale;
890 desc { "default";
891 rel1.to: "elm.text.sub";
892 rel2.to: "elm.text.sub";
893 color: FN_COL_DISABLE;
894 color_class: "list_item_sub_disabled";
895 text { font: FN; size: 8;
896 text_source: "elm.text.sub";
897 align: 0.0 1.0;
898 text_class: "list_item_sub";
899 }
900 hid;
901 }
902 desc { "selected";
903 inherit: "default";
904 hid;
905 }
906 desc { "disabled";
907 inherit: "default";
908 vis;
909 }
910 desc { "flip_enabled";
911 inherit: "default";
912 hid;
913 }
914 }
915 text { "label5";
916 effect: GLOW;
917 scale;
918 desc { "default";
919 rel1.offset: -2 -4;
920 rel1.to: "elm.text.sub";
921 rel2.offset: -1 0;
922 rel2.to: "elm.text.sub";
923 color: FN_COL_HIGHLIGHT;
924 color_class: "list_item_sub_selected";
925 text { font: FN; size: 8;
926 text_source: "elm.text.sub";
927 align: 0.0 1.0;
928 text_class: "list_item_sub";
929 }
930 hid;
931 }
932 desc { "selected";
933 inherit: "default";
934 vis;
935 }
936 desc { "disabled";
937 inherit: "default";
938 hid;
939 }
940 desc { "flip_enabled";
941 inherit: "default";
942 hid;
943 }
944 }
945 target_group: "subgroup" "elm.text.sub" "label4" "label5";
946 program {
947 signal: "elm,state,selected";
948 action: STATE_SET "selected";
949 groups: "default" "subgroup";
950 }
951 program {
952 signal: "elm,state,unselected";
953 action: STATE_SET "default";
954 groups: "default" "subgroup";
955 }
956 program {
957 signal: "elm,state,disabled";
958 action: STATE_SET "disabled";
959 groups: "default" "subgroup";
960 }
961 program {
962 signal: "elm,state,enabled";
963 action: STATE_SET "default";
964 groups: "default" "subgroup";
965 }
966 program {
967 signal: "elm,state,flip,enabled";
968 action: STATE_SET "flip_enabled";
969 groups: "default" "subgroup";
970 target: "elm.text.flip";
971 }
972 program {
973 signal: "elm,state,flip,disabled";
974 action: STATE_SET "default";
975 groups: "default" "subgroup";
976 target: "elm.text.flip";
977 }
978 //##//
979 swallow { "elm.swallow.pad"; mouse;
980 desc { "default";
981 fixed: 1 0;
982 align: 0.0 0.5;
983 rel1.offset: 2 2;
984 rel2.relative: 0.0 1.0;
985 rel2.offset: 2 -3;
986 }
987 }
988 swallow { "elm.swallow.icon"; mouse;
989 desc { "default";
990 fixed: 1 0;
991 align: 0.0 0.5;
992 aspect: 1.0 1.0;
993 rel1.to_x: "elm.swallow.pad";
994 rel1.relative: 1.0 0.0;
995 rel1.offset: -1 2;
996 rel2.to_x: "elm.swallow.pad";
997 rel2.relative: 1.0 1.0;
998 rel2.offset: -1 -3;
999 link.base: "elm,state,flip,disabled";
1000 }
1001 desc { "flip_enabled";
1002 inherit: "default";
1003 hid;
1004 link.base: "elm,state,flip,enabled";
1005 }
1006 }
1007 swallow { "elm.swallow.end"; mouse;
1008 desc { "default";
1009 fixed: 1 0;
1010 align: 1.0 0.5;
1011 aspect: 1.0 1.0;
1012 rel1.offset: -3 2;
1013 rel1.relative: 1.0 0.0;
1014 rel2.offset: -3 -3;
1015 link.base: "elm,state,flip,disabled";
1016 }
1017 desc { "flip_enabled";
1018 inherit: "default";
1019 hid;
1020 link.base: "elm,state,flip,enabled";
1021 }
1022 }
1023 //##//
1024
1025 }
1026 inherit: "genlist_top";
1027 }
1028 ODD("elm/genlist/item_odd/double_label/default", "elm/genlist/item/double_label/default")
1029 COMPRESS_SUB("elm/genlist/item_compress/double_label/default", "elm/genlist/item/double_label/default")
1030 COMPRESS_SUB_ODD("elm/genlist/item_compress_odd/double_label/default", "elm/genlist/item/double_label/default")
1031
1032}
1033