remove simplerss and add flexrss

This commit is contained in:
Marcos Pinto 2007-11-05 17:17:30 +00:00
parent a769af2262
commit 63ac691e64
11 changed files with 3810 additions and 1415 deletions

View File

@ -0,0 +1,67 @@
# Obviously needs work, but a decent start.
# Public domain
import gobject, gtk, time
class CalendarButton(gtk.Button):
format = None
calendar = None
window = None
__gsignals__ = {
'date-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)),
'date-selected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,))
}
def __lost_focus(self, win, e):
print e.type
def __day_selected(self, calendar):
self.window.hide()
newdate = self.get_date()
self.set_date(newdate[0], newdate[1], newdate[2])
self.emit("date-selected", newdate)
def __show_calendar(self, source):
if self.window != None:
self.window.show()
return
self.window = gtk.Window(gtk.WINDOW_POPUP)
self.window.set_position(gtk.WIN_POS_MOUSE)
self.window.set_destroy_with_parent(True)
self.window.set_transient_for(source.get_ancestor(gtk.Window))
self.window.add(self.calendar)
self.window.show_all()
def __set_date_on_button(self, year, month, day):
self.set_label(time.strftime('%x', time.strptime('%d/%d/%d' % (day, month, year), '%d/%m/%Y')))
def set_date(self, year, month, day):
self.__set_date_on_button(year, month, day)
self.calendar.select_month(month - 1, year)
self.calendar.select_day(day)
self.emit("date-changed", (year, month, day))
def get_date(self):
ret = self.calendar.get_date()
return (ret[0], ret[1] + 1, ret[2])
def __init__(self, year=None, month=None, day=None):
value = time.localtime()
if year == None:
year = value[0]
if month == None:
month = value[1]
if day == None:
day = value[2]
self.calendar = gtk.Calendar()
self.calendar.select_month(month - 1, year)
self.calendar.select_day(day)
self.calendar.connect("day-selected-double-click", self.__day_selected)
gtk.Button.__init__(self, time.strftime('%x', time.strptime('%d/%d/%d' % (day, month, year), '%d/%m/%Y')))
self.connect("pressed", self.__show_calendar)

File diff suppressed because it is too large Load Diff

BIN
plugins/FlexRSS/FlexRSS.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

393
plugins/FlexRSS/FlexRSS.svg Normal file
View File

@ -0,0 +1,393 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48px"
height="48px"
id="svg3440"
sodipodi:version="0.32"
inkscape:version="0.45"
sodipodi:docname="FlexRSS.svg"
inkscape:export-xdpi="480"
inkscape:export-ydpi="480"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
sodipodi:modified="true">
<defs
id="defs3">
<linearGradient
inkscape:collect="always"
id="linearGradient2973">
<stop
style="stop-color:#eeeeec;stop-opacity:1;"
offset="0"
id="stop2975" />
<stop
style="stop-color:#eeeeec;stop-opacity:0;"
offset="1"
id="stop2977" />
</linearGradient>
<linearGradient
id="linearGradient4126">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop4128" />
<stop
style="stop-color:#ffffff;stop-opacity:0.16494845;"
offset="1.0000000"
id="stop4130" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4114">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop4116" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop4118" />
</linearGradient>
<linearGradient
id="linearGradient3962">
<stop
style="stop-color:#d3e9ff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop3964" />
<stop
style="stop-color:#d3e9ff;stop-opacity:1.0000000;"
offset="0.15517241"
id="stop4134" />
<stop
style="stop-color:#4074ae;stop-opacity:1.0000000;"
offset="0.75000000"
id="stop4346" />
<stop
style="stop-color:#36486c;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop3966" />
</linearGradient>
<radialGradient
r="13.994944"
fy="33.506763"
fx="-10.089286"
cy="33.506763"
cx="-10.089286"
gradientTransform="matrix(1,0,0,0.791446,-14.01786,-11.28667)"
gradientUnits="userSpaceOnUse"
id="radialGradient4019"
xlink:href="#linearGradient3993"
inkscape:collect="always" />
<radialGradient
r="14.057444"
fy="31.329016"
fx="-10.323107"
cy="31.329016"
cx="-10.323107"
gradientTransform="matrix(1,0,0,0.792374,-19.58761,2.818569)"
gradientUnits="userSpaceOnUse"
id="radialGradient4004"
xlink:href="#linearGradient3993"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.792374,0,6.785475)"
r="14.057444"
fy="31.329016"
fx="-10.323107"
cy="31.329016"
cx="-10.323107"
id="radialGradient3999"
xlink:href="#linearGradient3993"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.341185,-0.153831,1.08001,2.395374,-15.42222,-25.62103)"
r="13.994946"
fy="24.241488"
fx="61.662098"
cy="24.241488"
cx="61.662098"
id="radialGradient3943"
xlink:href="#linearGradient1312"
inkscape:collect="always" />
<linearGradient
id="linearGradient1312">
<stop
id="stop1314"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop1316"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3993">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3995" />
<stop
style="stop-color:#000000;stop-opacity:0"
offset="1"
id="stop3997" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2973"
id="radialGradient3866"
cx="-22.375"
cy="18.499998"
fx="-22.375"
fy="18.499998"
r="14.33462"
gradientTransform="matrix(1,0,0,1.140022,40.17678,1.347091)"
gradientUnits="userSpaceOnUse" />
<radialGradient
gradientUnits="userSpaceOnUse"
r="12.289036"
fy="63.965388"
fx="15.115514"
cy="63.965388"
cx="15.115514"
gradientTransform="scale(1.643990,0.608276)"
id="radialGradient5000"
xlink:href="#linearGradient4114"
inkscape:collect="always" />
<linearGradient
id="linearGradient4989">
<stop
offset="0.0"
stop-color="#E3702D"
id="stop13201" />
<stop
offset="0.1071"
stop-color="#EA7D31"
id="stop13203" />
<stop
offset="0.3503"
stop-color="#F69537"
id="stop13205" />
<stop
offset="0.5"
stop-color="#FB9E3A"
id="stop13207" />
<stop
offset="0.7016"
stop-color="#EA7C31"
id="stop13209" />
<stop
offset="0.8866"
stop-color="#DE642B"
id="stop13211" />
<stop
offset="1.0"
stop-color="#D95B29"
id="stop13213" />
</linearGradient>
<linearGradient
id="linearGradient4977">
<stop
id="stop4979"
offset="0.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop4981"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.16494845;" />
</linearGradient>
<linearGradient
id="linearGradient4825"
inkscape:collect="always">
<stop
id="stop4827"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop4829"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4114"
id="radialGradient6090"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(1.64399,0.608276)"
cx="15.115514"
cy="63.965388"
fx="15.115514"
fy="63.965388"
r="12.289036" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4825"
id="radialGradient6098"
gradientUnits="userSpaceOnUse"
cx="12.071323"
cy="12.493138"
fx="12.071323"
fy="12.493138"
r="6.7175145" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient1312"
id="radialGradient6109"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.768231,1.13675,-0.820972,0.554824,-3.72248,-85.07126)"
cx="65.800331"
cy="27.16758"
fx="65.800331"
fy="27.16758"
r="12.972491" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4989"
id="radialGradient15360"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.486175,1.536108,0.932321,-0.902016,-38.10476,16.57354)"
cx="16.651781"
cy="32.187485"
fx="16.651781"
fy="32.187485"
r="17.089519" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.17254902"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="8"
inkscape:cx="36.657417"
inkscape:cy="37.982995"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1266"
inkscape:window-height="944"
inkscape:window-x="6"
inkscape:window-y="28"
inkscape:showpageshadow="false" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Internet Category</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:contributor>
<cc:Agent>
<dc:title>Tuomas Kuosmanen</dc:title>
</cc:Agent>
</dc:contributor>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:source>http://jimmac.musichall.cz</dc:source>
<dc:subject>
<rdf:Bag>
<rdf:li>internet</rdf:li>
<rdf:li>tools</rdf:li>
<rdf:li>applications</rdf:li>
<rdf:li>category</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
sodipodi:type="arc"
style="fill:url(#radialGradient6090);fill-opacity:1;stroke:none;stroke-opacity:1"
id="path4112"
sodipodi:cx="24.849752"
sodipodi:cy="38.908627"
sodipodi:rx="20.203051"
sodipodi:ry="7.4751287"
d="M 45.052803 38.908627 A 20.203051 7.4751287 0 1 1 4.6467018,38.908627 A 20.203051 7.4751287 0 1 1 45.052803 38.908627 z"
transform="matrix(0.947409,0,0,1.17786,1.244375,-6.853427)"
inkscape:export-xdpi="480"
inkscape:export-ydpi="480" />
<path
style="fill:url(#radialGradient15360);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.07523891px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 23.9375 0.96875 L 11.25 18.625 C 11.083253 18.932923 10.936659 19.263746 10.78125 19.59375 C 10.761069 19.636604 10.738726 19.675547 10.71875 19.71875 C 7.2395433 25.754509 6.9905394 34.252425 10.96875 39.71875 C 14.403259 44.437994 25.023267 46.877018 32.96875 43.59375 C 33.644467 43.314527 34.306967 43.02091 34.9375 42.65625 C 34.977742 42.632977 35.022469 42.617381 35.0625 42.59375 C 35.095502 42.574645 35.12346 42.550547 35.15625 42.53125 C 35.214913 42.496047 35.285557 42.473482 35.34375 42.4375 C 35.558127 42.307459 35.763748 42.169493 35.96875 42.03125 C 35.980782 42.02298 35.987992 42.008307 36 42 C 36.248731 41.831254 36.484083 41.64914 36.71875 41.46875 C 43.376411 36.350984 44.348198 26.670654 37.34375 18.28125 L 23.9375 0.96875 z "
id="path2069" />
<path
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.1000706;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.36612022"
d="M 23.996861,3.5433428 L 36.057351,19.151045 C 44.769741,29.58253 39.419346,42.414092 26.125181,43.508521 C 7.3917365,44.015286 7.4275065,28.119221 12.17284,20.333442 L 23.996861,3.5433428 z "
id="path2071"
sodipodi:nodetypes="ccccc" />
<path
style="opacity:0.46;fill:url(#radialGradient6109);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.07523891px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 23.940758,0.96491709 L 34.727367,14.909752 C 42.647208,24.392311 40.447304,20.283975 28.362481,21.278846 C 25.083165,11.203805 18.13871,11.859899 13.523802,15.675236 L 23.940758,0.96491709 z "
id="path3945"
sodipodi:nodetypes="ccccc" />
<path
transform="matrix(-0.829136,1.052307,1.239307,7.58326e-2,26.32898,25.58605)"
inkscape:r_cy="true"
inkscape:r_cx="true"
d="M 18.788838 12.493138 A 6.7175145 6.7175145 0 1 1 5.3538089,12.493138 A 6.7175145 6.7175145 0 1 1 18.788838 12.493138 z"
sodipodi:ry="6.7175145"
sodipodi:rx="6.7175145"
sodipodi:cy="12.493138"
sodipodi:cx="12.071323"
id="path4941"
style="opacity:0.21999996;color:black;fill:url(#radialGradient6098);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<circle
transform="matrix(0.1085714,0,0,0.1085714,11.347857,13.999286)"
cx="68"
cy="189"
r="24"
id="circle15442"
sodipodi:cx="68"
sodipodi:cy="189"
sodipodi:rx="24"
sodipodi:ry="24"
style="fill:#ffffff" />
<path
d="M 28.719284,37.125 L 25.027858,37.125 C 25.027858,32.208088 21.041912,28.222143 16.125,28.222143 L 16.125,24.530714 C 23.080632,24.530714 28.719284,30.169368 28.719284,37.125 z "
id="path15444"
style="fill:#ffffff" />
<path
d="M 31.325,37.125 C 31.325,28.730272 24.519728,21.925 16.125,21.925 L 16.125,18.125 C 26.61841,18.125 35.125,26.631589 35.125,37.125 L 31.325,37.125 z "
id="path15446"
style="fill:#ffffff" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,25 @@
FlexRSS_DEFAULTS = {
'VERSION': (0, 2, 3)
}
plugin_name = "FlexRSS"
plugin_author = "Daddy"
plugin_version = "%d.%d.%d" % (FlexRSS_DEFAULTS['VERSION'][0], FlexRSS_DEFAULTS['VERSION'][1], FlexRSS_DEFAULTS['VERSION'][2])
plugin_description = _("""
Advanced RSS scraper
This plugin is similar in purpose to Mark Adamson's excellent RSS Broadcatcher, but targets a more advanced audience. It is extremely powerful, configurable, unforgiving, and difficult.
Filters use regular expressions with named patterns and strptime(3)-like format filters to match items.
For more information and documentation, visit http://dev.deluge-torrent.org/wiki/Plugins/FlexRSS""")
from FlexRSS.plugin import plugin_FlexRSS
def deluge_init(deluge_path):
global path
path = deluge_path
def enable(core, interface):
global path
return plugin_FlexRSS(path, core, interface, FlexRSS_DEFAULTS)

View File

1732
plugins/FlexRSS/plugin.py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,55 +0,0 @@
# -*- coding: utf-8 -*-
#
# __init__.py
#
# Copyright (C) "Mark Adamson" 2007
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
plugin_name = _("Simple RSS")
plugin_author = "Mark Adamson"
plugin_version = "1.0"
plugin_description = _("""
Download Torrents automatically from SimpleRSS Feeds
Add RSS feeds on the 'Feeds' tab, then add filters for TV shows (or whatever) on the 'Filters' tab. Double-click entries on the 'Torrents' tab to download extra torrents from the feeds. The Options are pretty self-explanatary.
Please message me (SatNav) on the forums and let me know how you get on..
Enjoy!""")
def deluge_init(deluge_path):
global path
path = deluge_path
from SimpleRSS.plugin import plugin_SimpleRSS
def enable(core, interface):
global path
return plugin_SimpleRSS(path, core, interface)

View File

@ -1,475 +0,0 @@
# -*- coding: utf-8 -*-
#
# plugin.py
#
# Copyright (C) Marcos Pinto 2007 <markybob@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
class plugin_SimpleRSS:
def __init__(self, path, deluge_core, deluge_interface):
#set up system thingies
import gtk, gtk.glade, os, ConfigParser, feedparser
import deluge.common, deluge.dgtk, deluge.pref
from time import asctime
self.path = path
self.core = deluge_core
self.interface = deluge_interface
#set up feeds file
self.feeds_config = ConfigParser.ConfigParser()
self.feeds_file = deluge.common.CONFIG_DIR + "/feeds.conf"
if not os.path.isfile(self.feeds_file):
f = open(self.feeds_file, mode='w')
f.flush()
f.close()
self.feeds_config.read(self.feeds_file)
#set up filters file
self.filters_config = ConfigParser.ConfigParser()
self.filters_file = deluge.common.CONFIG_DIR + "/filters.conf"
if not os.path.isfile(self.filters_file):
f = open(self.filters_file, mode='w')
f.flush()
f.close()
self.filters_config.read(self.filters_file)
#set up the preferences dialog
glade = gtk.glade.XML(path + "/rss.glade")
self.dlg = glade.get_widget("dialog")
self.dlg.set_position(gtk.WIN_POS_CENTER)
self.dlg.set_icon_from_file(self.path + "/rss.png")
#set up the feeds list viewer
self.feeds_view = glade.get_widget("feeds_view")
model = gtk.ListStore(str, str, str)
self.feeds_view.set_model(model)
deluge.dgtk.add_text_column(self.feeds_view, _("Name"), 0)
deluge.dgtk.add_text_column(self.feeds_view, _("URL"), 1)
deluge.dgtk.add_text_column(self.feeds_view, _("Last Entry Date"), 2)
#set up the torrents list viewer
self.torrents_view = glade.get_widget("torrents_view")
model = gtk.ListStore(str, str, str, str)
self.torrents_view.set_model(model)
deluge.dgtk.add_text_column(self.torrents_view, _("Feed"), 0)
deluge.dgtk.add_text_column(self.torrents_view, _("Name"), 1)
deluge.dgtk.add_text_column(self.torrents_view, _("URL"), 2)
deluge.dgtk.add_text_column(self.torrents_view, _("Date"), 3)
# Setup the filters list viewer
self.filters_view = glade.get_widget("filters_view")
model = gtk.ListStore(str)
self.filters_view.set_model(model)
deluge.dgtk.add_text_column(self.filters_view, _("Name"), 0)
# set up the feed choice combobox
self.feedchoice_combo = glade.get_widget("feedchoice_combo")
model = gtk.ListStore(str)
self.feedchoice_combo.set_model(model)
cell = gtk.CellRendererText()
self.feedchoice_combo.pack_start(cell, True)
self.feedchoice_combo.add_attribute(cell, 'text', 0)
# set up the torrents feed choice combobox
self.torrents_fcc = glade.get_widget("torrents_fcc")
model = gtk.ListStore(str)
self.torrents_fcc.set_model(model)
cell = gtk.CellRendererText()
self.torrents_fcc.pack_start(cell, True)
self.torrents_fcc.add_attribute(cell, 'text', 0)
#set up the rest of the GUI elements
self.name_entry = glade.get_widget("name_entry")
self.url_entry = glade.get_widget("url_entry")
self.button_addfeed = glade.get_widget("button_addfeed")
self.button_delfeed = glade.get_widget("button_delfeed")
self.chkfeeds = glade.get_widget("chkfeeds")
self.filtername_entry = glade.get_widget("filtername_entry")
self.filterexp_entry = glade.get_widget("filterexp_entry")
self.button_delfilter = glade.get_widget("button_delfilter")
self.checkonstart_button = glade.get_widget("checkonstart_button")
self.update_entry = glade.get_widget("update_entry")
#Connect event signals
self.filters_view.connect("cursor-changed", self.filter_row_clicked)
dic = { "addfeed_clicked" : self.addfeed_clicked,
"delfeed_clicked" : self.delfeed_clicked,
"addfilter_clicked" : self.addfilter_clicked,
"delfilter_clicked" : self.delfilter_clicked,
"row_clicked" : self.row_clicked,
"feedtext_changed" : self.feedtext_changed,
"filtername_lostfocus" : self.filtername_lostfocus,
"filterexp_lostfocus" : self.filterexp_lostfocus,
"feedchoice_combo_changed" : self.feedchoice_combo_changed,
"torrents_fcc_changed" : self.torrents_fcc_changed,
"torrents_view_row_activated" : self.torrents_view_row_activated,
"chkfeeds_clicked" : self.chkfeeds_clicked,
"cancel_clicked" : self.dialog_cancel,
"ok_clicked" : self.dialog_ok }
glade.signal_autoconnect(dic)
self.feeds_view.get_selection().set_select_function(self.row_clicked)
self.timer = 0
self.torrents_list = []
#self.checkfeeds()
# Access the interface's toolbar
self.toolbar = self.interface.toolbar
# Make a toolbar button
icon = gtk.Image()
icon.set_from_file(self.path + "/rss.png") # Toolbar items should be 22x22 pixel images
self.button = gtk.ToolButton(icon_widget=icon, label=_("RSS"))
self.ttips = gtk.Tooltips()
self.button.set_tooltip(self.ttips, _("SimpleRSS Broadcatcher"))
self.button.connect("clicked", self.rss_clicked) # Connect the signal handler for the button
self.toolbar.add(self.button) # Add button to toolbar
self.button.show_all() # Show the button
self.checkonstart = False
#load options
if self.feeds_config.has_option("DEFAULT", "interval"):
self.interval = self.feeds_config.getint("DEFAULT", "interval")
self.update_entry.set_text(self.feeds_config.get("DEFAULT", "interval"))
else:
self.interval = 900
self.feeds_config.set("DEFAULT", "interval", 900)
if self.feeds_config.has_option("DEFAULT", "checkonstart"):
self.checkonstart = self.feeds_config.getboolean("DEFAULT", "checkonstart")
self.checkonstart_button.set_active(self.checkonstart)
else:
self.checkonstart = False
self.feeds_config.set("DEFAULT", "checkonstart", False)
if self.checkonstart_button.get_active():
self.timer = self.interval - 5
def rss_clicked(self, button):
self.configure(self)
def unload(self):
self.toolbar.remove(self.button) # Remove the button from the toolbar
f = open(self.feeds_file, "w")
self.feeds_config.write(f)
f.close()
def feedtext_changed(self, args):
a = (self.name_entry.get_text() != "")
b = (self.url_entry.get_text() != "")
if(a and b):
self.button_addfeed.set_sensitive(1)
else:
self.button_addfeed.set_sensitive(0)
def addfeed_clicked(self, args):
self.feeds_view.get_model().append([self.name_entry.get_text(),
self.url_entry.get_text(), ""])
self.feedchoice_combo.append_text(self.name_entry.get_text())
self.torrents_fcc.append_text(self.name_entry.get_text())
self.feeds_config.add_section(self.name_entry.get_text())
self.feeds_config.set(self.name_entry.get_text(), "url", self.url_entry.get_text())
self.feeds_config.set(self.name_entry.get_text(), "lastchecked", "")
self.name_entry.set_text("")
self.url_entry.set_text("")
def delfeed_clicked(self, args):
(model, selection) = self.feeds_view.get_selection().get_selected()
text = self.feeds_view.get_model().get_value(selection, 0)
model2 = self.feedchoice_combo.get_model()
model3 = self.torrents_fcc.get_model()
the_iter = model2.get_iter_first()
print text
while the_iter is not None:
print model2.get_value(the_iter, 0)
if (model2.get_value(the_iter, 0) == text):
remove_iter = the_iter
the_iter = model2.iter_next(the_iter)
model2.remove(remove_iter)
the_iter = model3.get_iter_first()
while the_iter is not None:
print model3.get_value(the_iter, 0)
if (model3.get_value(the_iter, 0) == text):
remove_iter = the_iter
the_iter = model3.iter_next(the_iter)
model3.remove(remove_iter)
model.remove(selection)
for filt in self.filters_config.sections():
if self.filters_config.get(filt, "feed") == text:
self.filters_config.set(filt, "feed", "All")
self.feeds_config.remove_section(text)
self.button_delfeed.set_sensitive(0)
def row_clicked(self, args):
self.button_delfeed.set_sensitive(1)
return True
def addfilter_clicked(self, args):
unique = True
for filt in self.filters_config.sections():
if filt == _("New Filter"):
unique = False
if unique:
self.current_filter = _("New Filter")
self.filters_config.add_section(_("New Filter"))
new_iter = self.filters_view.get_model().append([_("New Filter")])
self.filters_view.get_selection().select_iter(new_iter)
self.filters_config.set(_("New Filter"), "filterexp", "")
self.filters_config.set(_("New Filter"), "feed", "All")
self.filtername_entry.set_text(_("New Filter"))
self.feedchoice_combo.set_active(0)
self.filtername_entry.set_sensitive(1)
self.filterexp_entry.set_sensitive(1)
self.feedchoice_combo.set_sensitive(1)
self.filterexp_entry.set_text("")
self.filtername_entry.grab_focus()
self.button_delfilter.set_sensitive(1)
def delfilter_clicked(self, args):
model, selection = self.filters_view.get_selection().get_selected()
self.filters_config.remove_section(self.current_filter)
model.remove(selection)
self.current_filter = None
self.filtername_entry.set_text("")
self.filterexp_entry.set_text("")
self.feedchoice_combo.set_active(-1)
self.filtername_entry.set_sensitive(0)
self.filterexp_entry.set_sensitive(0)
self.feedchoice_combo.set_sensitive(0)
self.button_delfilter.set_sensitive(0)
def filter_row_clicked(self, widget):
selection = self.filters_view.get_selection()
model, selection_iter = selection.get_selected()
print model
print selection_iter
self.current_filter = self.filters_view.get_model().get_value(selection_iter, 0)
self.filtername_entry.set_text(self.current_filter)
self.filterexp_entry.set_text(self.filters_config.get(self.current_filter, "filterexp"))
feed = self.filters_config.get(self.current_filter, "feed")
model2 = self.feedchoice_combo.get_model()
the_iter = model2.get_iter_first()
while the_iter is not None:
#print model2.get_value(the_iter, 0)
if (model2.get_value(the_iter, 0) == feed):
set_iter = the_iter
the_iter = model2.iter_next(the_iter)
self.feedchoice_combo.set_active_iter(set_iter)
self.filtername_entry.set_sensitive(1)
self.filterexp_entry.set_sensitive(1)
self.feedchoice_combo.set_sensitive(1)
self.button_delfilter.set_sensitive(1)
def filtername_lostfocus(self, args, spare):
(model, selection) = self.filters_view.get_selection().get_selected()
old_filtername = self.filters_view.get_model().get_value(selection, 0)
self.filters_config.remove_section(old_filtername)
model.remove(selection)
self.current_filter = self.filtername_entry.get_text()
new_iter = self.filters_view.get_model().append([self.current_filter])
self.filters_view.get_selection().select_iter(new_iter)
self.filters_config.add_section(self.current_filter)
self.filters_config.set(self.current_filter, "filterexp", self.filterexp_entry.get_text())
self.filters_config.set(self.current_filter, "feed", self.feedchoice_combo.get_active_text())
def filterexp_lostfocus(self, args, spare):
self.filters_config.set(self.current_filter, "filterexp", self.filterexp_entry.get_text())
def feedchoice_combo_changed(self, args):
self.filters_config.set(self.current_filter, "feed", self.feedchoice_combo.get_active_text())
def torrents_fcc_changed(self, args):
model = self.torrents_view.get_model()
model.clear()
if self.torrents_fcc.get_active_text() == _("All"):
for (date, feed, title, link) in self.torrents_list:
self.torrents_view.get_model().append((feed, title, link, date))
else:
for (date, feed, title, link) in self.torrents_list:
if feed == self.torrents_fcc.get_active_text():
self.torrents_view.get_model().append((feed, title, link, date))
def torrents_view_row_activated(self, widget, spare1, spare2):
selection = widget.get_selection()
model, selection_iter = selection.get_selected()
self.interface.interactive_add_torrent_url(widget.get_model().get_value(selection_iter, 2))
def chkfeeds_clicked(self, args):
self.checkfeeds()
def checkfeeds(self):
import feedparser, datetime
from time import asctime, strptime
avail = {}
sorted = {}
self.torrents_list = []
for name in self.feeds_config.sections():
print "Attempting to parse " + name
tmp = feedparser.parse(self.feeds_config.get(name, "url"))
try:
print "Parsed " + tmp['feed']['title']
avail[name] = True
except:
print "Failed to download/parse " + name
avail[name] = False
if avail[name]:
entries = []
entries.extend( tmp[ "items" ] )
decorated = [(entry["date_parsed"], entry) for entry in entries]
tmplist = [(entry["date_parsed"], name, entry["title"], entry.links[0].href) for entry in entries]
decorated.sort()
self.torrents_list.extend(tmplist)
#decorated.reverse() # for most recent entries first
sorted[name] = [entry for (date,entry) in decorated]
model = self.torrents_view.get_model()
model.clear()
self.torrents_list.sort()
self.torrents_list.reverse()
#self.torrents_view.get_model().append([entry for entry in self.torrents_list])
for (date,feed,title,link) in self.torrents_list:
self.torrents_view.get_model().append((feed, title, link, date))
#for key in sorted.keys():
# print "listing entries in " + key
#
# for entry in sorted[key]:
# print entry.title
# for enclosure in entry.enclosures:
# self.torrents_view.get_model().append( (key, entry.title, enclosure.href, entry.date_parsed) )
checked = {}
for name in self.filters_config.sections():
checkfiltername = name
checkfilterexp = self.filters_config.get(name, "filterexp")
checkfilterfeed = self.filters_config.get(name, "feed")
print "filter: " + checkfiltername
print "search: " + checkfilterexp
print "feed: " + checkfilterfeed
if checkfilterfeed == "All":
#print "made it to 'All'"
for feedname in sorted.keys():
if avail[feedname]:
print feedname + " last checked: " + self.feeds_config.get(feedname, "lastchecked")
if self.feeds_config.get(feedname, "lastchecked") != "":
lastchecked = strptime(self.feeds_config.get(feedname, "lastchecked"))
else:
lastchecked = strptime(asctime(sorted[feedname][0].date_parsed))
#print "searching feed: " + feedname
for entry in sorted[feedname]:
#print entry.title + ": " + asctime(entry.date_parsed)
if (strptime(asctime(entry.date_parsed)) > lastchecked):
#print entry.date_parsed
#print " > "
#print lastchecked
if entry.title.find(checkfilterexp) != -1:
#print "contains" + checkfilterexp
for enclosure in entry.enclosures:
print enclosure.href
self.interface.interactive_add_torrent_url(enclosure.href)
#self.feeds_config.set(feedname, "lastchecked", asctime(entry.date_parsed))
else:
if avail[checkfilterfeed]:
print "searching feed: " + checkfilterfeed
if self.feeds_config.get(checkfilterfeed, "lastchecked") != "":
lastchecked = strptime(self.feeds_config.get(checkfilterfeed, "lastchecked"))
else:
#print sorted[checkfilterfeed][1].date_parsed
lastchecked = strptime(asctime(sorted[checkfilterfeed][0].date_parsed))
print "lastchecked: " + asctime(lastchecked)
for entry in sorted[checkfilterfeed]:
#print entry.title + ": " + asctime(entry.date_parsed)
if (strptime(asctime(entry.date_parsed)) > lastchecked):
#print entry.date_parsed
#print " > "
#print lastchecked
if (entry.title.find(checkfilterexp) != -1):
#print "contains" + checkfilterexp
for enclosure in entry.enclosures:
print enclosure.href
self.interface.interactive_add_torrent_url(enclosure.href)
#self.feeds_config.set(checkfilterfeed, "lastchecked", asctime(entry.date_parsed))
for name in avail.keys():
if avail[name]:
self.feeds_config.set(name, "lastchecked", asctime(sorted[name][len(sorted[name])-1].date_parsed))
self.timer = 0
def configure(self, widget=None):
import gtk, gtk.glade
from deluge import common
self.dlg.show_all()
model = self.feeds_view.get_model()
model.clear()
model2 = self.feedchoice_combo.get_model()
model2.clear()
model3 = self.filters_view.get_model()
model3.clear()
model4 = self.torrents_fcc.get_model()
model4.clear()
self.filtername_entry.set_text("")
self.filterexp_entry.set_text("")
self.name_entry.set_text("")
self.url_entry.set_text("")
self.feedchoice_combo.append_text(_("All"))
self.torrents_fcc.append_text(_("All"))
self.torrents_fcc.set_active(0)
for name in self.feeds_config.sections():
self.feeds_view.get_model().append( (name, self.feeds_config.get(name, "url"), self.feeds_config.get(name, "lastchecked") ) )
self.feedchoice_combo.append_text(name)
self.torrents_fcc.append_text(name)
for filters in self.filters_config.sections():
self.filters_view.get_model().append( ([filters]) )
#self.checkfeeds()
self.button_addfeed.set_sensitive(0)
self.button_delfeed.set_sensitive(0)
self.filtername_entry.set_sensitive(0)
self.filterexp_entry.set_sensitive(0)
self.feedchoice_combo.set_sensitive(0)
self.button_delfilter.set_sensitive(0)
self.update_entry.set_text(str(self.interval))
self.checkonstart_button.set_active(self.checkonstart)
def dialog_ok(self, source):
self.dlg.hide_all()
self.interval = int(self.update_entry.get_text())
self.feeds_config.set("DEFAULT", "interval", self.update_entry.get_text())
self.feeds_config.set("DEFAULT", "checkonstart", self.checkonstart_button.get_active())
f = open(self.filters_file, "w")
self.filters_config.write(f)
f.close()
f = open(self.feeds_file, "w")
self.feeds_config.write(f)
f.close()
def dialog_cancel(self, source):
self.dlg.hide_all()
def update(self):
self.timer += 1
if self.timer >= self.interval:
import threading
print "BONG!"
threading.Thread(target=self.checkfeeds).start
self.timer = 0

View File

@ -1,885 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.3.3 on Sun Aug 5 10:26:04 2007 -->
<glade-interface>
<widget class="GtkDialog" id="dialog">
<property name="border_width">5</property>
<property name="title" translatable="yes">RSS Broadcatcher Settings</property>
<property name="default_width">512</property>
<property name="default_height">384</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="spacing">2</property>
<child>
<widget class="GtkNotebook" id="notebook1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<child>
<widget class="GtkTreeView" id="feeds_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="headers_clickable">True</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkViewport" id="viewport9">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkHBox" id="hbox2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkViewport" id="viewport7">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label2">
<property name="width_request">80</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Feed Name:</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="name_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<signal name="changed" handler="feedtext_changed"/>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkViewport" id="viewport8">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox7">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkViewport" id="viewport4">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label3">
<property name="width_request">80</property>
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Feed URL:</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="url_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<signal name="changed" handler="feedtext_changed"/>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkViewport" id="viewport5">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
</widget>
<packing>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="homogeneous">True</property>
<child>
<widget class="GtkViewport" id="viewport1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_addfeed">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label">gtk-add</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="addfeed_clicked"/>
<signal name="activate" handler="addfeed_clicked"/>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_delfeed">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label">gtk-remove</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="delfeed_clicked"/>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkViewport" id="viewport2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
</widget>
<packing>
<property name="position">3</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Feeds</property>
</widget>
<packing>
<property name="type">tab</property>
<property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<widget class="GtkHPaned" id="hpaned1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="position">160</property>
<property name="position_set">True</property>
<child>
<widget class="GtkVPaned" id="vpaned1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="position">200</property>
<property name="position_set">True</property>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<child>
<widget class="GtkTreeView" id="filters_view">
<property name="height_request">285</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="headers_clickable">True</property>
</widget>
</child>
</widget>
<packing>
<property name="resize">True</property>
<property name="shrink">False</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="resize">True</property>
<property name="shrink">False</property>
</packing>
</child>
<child>
<widget class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="n_rows">6</property>
<property name="n_columns">2</property>
<child>
<widget class="GtkButton" id="button_addfilter">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label">gtk-add</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="addfilter_clicked"/>
<signal name="activate" handler="addfilter_clicked"/>
</widget>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_delfilter">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label">gtk-remove</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="delfilter_clicked"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Feed</property>
</widget>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkComboBox" id="feedchoice_combo">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<signal name="changed" handler="feedchoice_combo_changed"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Filter Exp:</property>
</widget>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="filterexp_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<signal name="focus_out_event" handler="filterexp_lostfocus"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Filter Name:</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="filtername_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<signal name="changed" handler="filtername_changed"/>
<signal name="focus_out_event" handler="filtername_lostfocus"/>
<signal name="editing_done" handler="filtername_editing_done"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkViewport" id="viewport10">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
</child>
<child>
<widget class="GtkViewport" id="viewport12">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<widget class="GtkViewport" id="viewport13">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<widget class="GtkViewport" id="viewport14">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
</widget>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
<property name="tab_expand">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Filters</property>
</widget>
<packing>
<property name="type">tab</property>
<property name="position">1</property>
<property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox4">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkHBox" id="hbox5">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkLabel" id="label11">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes"> Feed: </property>
</widget>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<widget class="GtkComboBox" id="torrents_fcc">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<signal name="changed" handler="torrents_fcc_changed"/>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<child>
<widget class="GtkTreeView" id="torrents_view">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="headers_clickable">True</property>
<signal name="row_activated" handler="torrents_view_row_activated"/>
</widget>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="position">2</property>
<property name="tab_expand">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Torrents</property>
</widget>
<packing>
<property name="type">tab</property>
<property name="position">2</property>
<property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox5">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkViewport" id="viewport23">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
</child>
<child>
<widget class="GtkHBox" id="hbox4">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkViewport" id="viewport15">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
</child>
<child>
<widget class="GtkLabel" id="label10">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Update Interval (seconds): </property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkViewport" id="viewport19">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<widget class="GtkEntry" id="update_entry">
<property name="width_request">5</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="max_length">7</property>
</widget>
</child>
</widget>
<packing>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkViewport" id="viewport21">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="position">3</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox6">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkViewport" id="viewport17">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
</child>
<child>
<widget class="GtkCheckButton" id="checkonstart_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Check feeds on Deluge start</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkViewport" id="viewport18">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="position">2</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox8">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkViewport" id="viewport6">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
</child>
<child>
<widget class="GtkButton" id="chkfeeds">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Check Feeds Now</property>
<property name="response_id">0</property>
<signal name="clicked" handler="chkfeeds_clicked"/>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkViewport" id="viewport11">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="position">2</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
<child>
<widget class="GtkViewport" id="viewport24">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="position">4</property>
</packing>
</child>
</widget>
<packing>
<property name="position">3</property>
<property name="tab_expand">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Options</property>
</widget>
<packing>
<property name="type">tab</property>
<property name="position">3</property>
<property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="button_cancel">
<property name="visible">True</property>
<property name="label">gtk-cancel</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="cancel_clicked"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="button_ok">
<property name="visible">True</property>
<property name="label">gtk-ok</property>
<property name="use_stock">True</property>
<property name="response_id">1</property>
<signal name="clicked" handler="ok_clicked"/>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB