# This is part of the Murmur Museek Client, and distributed under the GPLv2
# Copyright (c) 2007 daelstorm.
import gtk
import os
import imagedata
from pymurmur.utils import _
class MetaDialog( gtk.Dialog):
def __init__(self, frame, message="", data=None, modal= True):
gtk.Dialog.__init__(self)
self.connect("destroy", self.quit)
self.connect("delete_event", self.quit)
self.nicotine = frame
if modal:
self.set_modal(True)
self.box = gtk.VBox(spacing=10)
self.box.set_border_width(10)
self.box.show()
self.vbox.pack_start(self.box)
if message:
label = gtk.Label()
label.set_markup(message)
label.set_line_wrap(False)
self.box.pack_start(label, False, False)
label.show()
label.set_alignment(0, 0.5)
self.current = 0
self.data = data
hbox2 = gtk.HBox(spacing=5)
hbox2.show()
self.UF = gtk.Frame()
self.UF.show()
self.UF.set_shadow_type(gtk.SHADOW_ETCHED_IN)
self.box.pack_start(self.UF, False, False)
vbox3 = gtk.VBox(spacing=5)
vbox3.set_border_width(5)
vbox3.show()
self.UF.add(vbox3)
self.Username = self.MakeLabelStaticEntry( hbox2, "Username:", "", expand=False)
self.BrowseUser = self.nicotine.CreateIconButton(gtk.STOCK_HARDDISK, "stock", self.OnBrowseUser, _("Browse"))
hbox2.pack_start(self.BrowseUser, False, False)
self.Position = self.MakeLabelStaticEntry( hbox2, "List Position:", "", expand=False, width=7, xalign=1)
vbox3.pack_start(hbox2, False, False)
hbox3 = gtk.HBox(spacing=5)
hbox3.show()
vbox3.pack_start(hbox3, False, False)
self.Filename = self.MakeLabelStaticEntry( hbox3, _("File Name:"), "", fill=True)
hbox5 = gtk.HBox(spacing=5)
hbox5.show()
vbox3.pack_start(hbox5, False, False)
self.Directory = self.MakeLabelStaticEntry( hbox5, _("Directory:"), "", fill=True)
self.Media = gtk.Frame()
self.Media.show()
self.Media.set_shadow_type(gtk.SHADOW_ETCHED_IN)
hbox6 = gtk.HBox(spacing=5, homogeneous=False)
hbox6.set_border_width(5)
hbox6.show()
self.Size = self.MakeLabelStaticEntry( hbox6, _("File Size:"), "", expand=False, width=11, xalign=1)
self.Length = self.MakeLabelStaticEntry( hbox6, _("Length:"), "", expand=False, width=7, xalign=0.5)
self.Bitrate = self.MakeLabelStaticEntry( hbox6, _("Bitrate:"), "", expand=False, width=12, xalign=0.5)
self.Media.add(hbox6)
self.box.pack_start(self.Media, False, False)
hbox7 = gtk.HBox(spacing=5, homogeneous=False)
hbox7.show()
self.box.pack_start(hbox7, False, False)
self.Immediate = self.MakeLabelStaticEntry( hbox7, _("Immediate Downloads:"), "", expand=False, width=6, xalign=0.5)
self.Queue = self.MakeLabelStaticEntry( hbox7, _("Queue:"), "", expand=False, width=6, xalign=1)
hbox4 = gtk.HBox(spacing=5, homogeneous=False)
hbox4.show()
self.box.pack_start(hbox4, False, False)
self.Speed = self.MakeLabelStaticEntry( hbox4, _("Last Speed:"), "", expand=False, width=11, xalign=1)
self.Country = gtk.Label()
self.Country.hide()
hbox4.pack_start(self.Country, False, False)
self.buttonbox = gtk.HBox(False, 2)
self.buttonbox.show()
self.buttonbox.set_spacing(2)
self.box.pack_start(self.buttonbox, False, False)
# Download Button
self.DownloadItem = self.nicotine.CreateIconButton(gtk.STOCK_GO_DOWN, "stock", self.OnDownloadItem, _("Download"))
self.buttonbox.pack_start(self.DownloadItem, False, False)
# Download All Button
self.DownloadAll = self.nicotine.CreateIconButton(gtk.STOCK_GO_DOWN, "stock", self.OnDownloadAll, _("Download All"))
self.buttonbox.pack_start(self.DownloadAll, False, False)
self.Selected = self.MakeLabel( self.buttonbox, "%s File(s) Selected" % len(self.data.keys()), expand=False, xalign=1)
self.Previous = self.nicotine.CreateIconButton(gtk.STOCK_GO_BACK, "stock", self.OnPrevious, _("Previous"))
self.Next = self.nicotine.CreateIconButton(gtk.STOCK_GO_FORWARD, "stock", self.OnNext, _("Next"))
self.buttonbox.pack_end(self.Next, False, False)
self.buttonbox.pack_end(self.Previous, False, False)
button = self.nicotine.CreateIconButton(gtk.STOCK_CLOSE, "stock", self.click, _("Close"))
button.set_flags(gtk.CAN_DEFAULT)
self.action_area.pack_start(button)
button.grab_default()
self.ret = None
self.Display(self.current)
def OnDownloadItem(self, widget):
meta = self.data[self.current]
self.nicotine.np.transfers.getFile(meta["user"], meta["fn"], "")
def OnBrowseUser(self, widget):
meta = self.data[self.current]
self.nicotine.BrowseUser(meta["user"])
def OnDownloadAll(self, widget):
for item, meta in self.data.items():
self.nicotine.np.transfers.getFile(meta["user"], meta["fn"], "")
def OnPrevious(self, widget):
if len(self.data.keys()) > 1:
_list = self.data.keys()
if not self.current in _list:
ix -= 1
else:
ix = _list.index(self.current)
ix -= 1
if ix < 0:
ix = -1
elif ix >= len(_list):
ix = 0
if ix != None:
self.current = _list[ix]
if self.current == None:
return
self.Display(self.current)
def OnNext(self, widget):
if len(self.data.keys()) > 1:
_list = self.data.keys()
if not self.current in _list:
ix += 1
else:
ix = _list.index(self.current)
ix += 1
if ix < 0:
ix = -1
elif ix >= len(_list):
ix = 0
if ix != None:
self.current = _list[ix]
if self.current == None:
return
self.Display(self.current)
def Display(self, item):
if not self.data.has_key(item):
return
self.current = item
More = False
if len(self.data.keys()) > 1:
More = True
self.Next.set_sensitive(More)
self.Previous.set_sensitive(More)
self.DownloadAll.set_sensitive(More)
self.Username.set_text (self.data[self.current]["user"])
self.Filename.set_text (self.data[self.current]["filename"])
self.Directory.set_text (self.data[self.current]["directory"])
self.Size.set_text (str(self.data[self.current]["size"]))
self.Speed.set_text (self.data[self.current]["speed"])
self.Position.set_text (str(self.data[self.current]["position"]))
if self.data[self.current]["bitrate"] not in ("", None):
self.Bitrate.set_text(self.data[self.current]["bitrate"] + " Kbps")
else:
self.Bitrate.set_text("")
self.Length.set_text (self.data[self.current]["length"])
self.Queue.set_text (self.data[self.current]["queue"])
self.Immediate.set_text (str(self.data[self.current]["immediate"] == "Y"))
if self.data[self.current]["country"] not in ("", None):
self.Country.set_markup("Country Code: "+self.data[self.current]["country"] )
self.Country.show()
else:
self.Country.set_text("")
self.Country.hide()
def quit(self, w=None, event=None):
self.hide()
self.destroy()
gtk.main_quit()
def click(self, button):
self.quit()
def MakeLabel(self, parent, labeltitle, expand=True, fill=False, xalign=0):
label = gtk.Label()
label.set_markup(labeltitle)
label.show()
#label.set_property("selectable", True)
parent.pack_start(label, expand, fill)
try:label.set_property("xalign", xalign)
except Exception, e:
print e
pass
return label
def MakeLabelStaticEntry(self, parent, labeltitle, entrydata, editable=False, expand=True, fill=False, width=-1, xalign=0):
label = gtk.Label()
label.set_markup(labeltitle)
label.show()
parent.pack_start(label, False, False)
entry = gtk.Entry()
entry.set_property("editable", editable)
entry.set_property("width-chars", width)
try:entry.set_property("xalign", xalign)
except:pass
entry.show()
if entrydata is not None:
entry.set_text(entrydata)
parent.pack_start(entry, expand, fill)
return entry
class HelpDialog( gtk.Dialog):
def __init__(self, frame, message="", modal= True, helpdict={}, sort=False):
gtk.Dialog.__init__(self)
self.connect("destroy", self.quit)
self.connect("delete_event", self.quit)
if modal:
self.set_modal(True)
box = gtk.VBox(spacing=5)
box.set_border_width(5)
self.vbox.pack_start(box)
box.show()
if message:
label = gtk.Label()
label.set_alignment(0, 0)
label.set_markup(message)
box.pack_start(label, False, False)
label.set_line_wrap(True)
label.show()
helplist = helpdict
if sort:
helplist.sort()
self.table1 = gtk.Table( homogeneous=False)
self.table1.show()
self.table1.set_col_spacings(5)
self.table1.set_row_spacings(5)
count = 0
for key in helplist:
keylabel = gtk.Label()
keylabel.set_alignment(0, 0)
keylabel.set_markup(key[1])
keylabel.show()
self.table1.attach(keylabel, 0, 1, count, count+1, gtk.FILL, gtk.SHRINK, 0, 0)
valuelabel = gtk.Label()
valuelabel.set_alignment(0, 0)
valuelabel.set_markup(key[2])
valuelabel.set_line_wrap(True)
valuelabel.show()
self.table1.attach(valuelabel, 1, 2, count, count+1, gtk.FILL, gtk.SHRINK, 0, 0)
count += 1
box.pack_start(self.table1, False, False)
button = frame.CreateIconButton(gtk.STOCK_OK, "stock", self.quit, _("OK"))
self.action_area.pack_start(button)
self.ret = None
def quit(self, w=None, event=None):
self.hide()
self.destroy()
gtk.main_quit()
def OpenHelpDialog(frame, title="Help", message="",
modal= True, helpdict={}, sort=False):
win = HelpDialog(frame, message, modal=modal, helpdict=helpdict, sort=sort)
win.set_title(title)
win.set_icon(frame.images["icon"])
win.set_default_size(300, 100)
win.show()
gtk.main()
class EntryDialog( gtk.Dialog):
def __init__(self, frame, message="", default_text='', modal= True, option=False, optionmessage="", optionvalue=False, droplist=[]):
gtk.Dialog.__init__(self)
self.connect("destroy", self.quit)
self.connect("delete_event", self.quit)
self.gotoption = option
if modal:
self.set_modal(True)
box = gtk.VBox(spacing=10)
box.set_border_width(10)
self.vbox.pack_start(box)
box.show()
if message:
label = gtk.Label(message)
box.pack_start(label, False, False)
label.set_line_wrap(True)
label.show()
self.combo = gtk.combo_box_entry_new_text()
for i in droplist:
self.combo.append_text( i)
self.combo.child.set_text(default_text)
box.pack_start(self.combo, False, False)
self.combo.show()
self.combo.grab_focus()
self.option = gtk.CheckButton()
self.option.set_active(optionvalue)
self.option.set_label(optionmessage)
self.option.show()
if self.gotoption:
box.pack_start(self.option, False, False)
button = gtk.Button(_("OK"))
button.connect("clicked", self.click)
button.set_flags(gtk.CAN_DEFAULT)
self.action_area.pack_start(button)
button.show()
button.grab_default()
button = gtk.Button(_("Cancel"))
button.connect("clicked", self.quit)
button.set_flags(gtk.CAN_DEFAULT)
self.action_area.pack_start(button)
button.show()
self.ret = None
def quit(self, w=None, event=None):
self.hide()
self.destroy()
gtk.main_quit()
def click(self, button):
if self.gotoption:
self.ret = [self.combo.child.get_text(), self.option.get_active()]
else:
self.ret = self.combo.child.get_text()
self.quit()
def input_box(frame, title="Input Box", message="", default_text='',
modal= True, option=False, optionmessage="", optionvalue=False, droplist=[]):
win = EntryDialog(frame, message, default_text, modal=modal, option=option, optionmessage=optionmessage, optionvalue=optionvalue, droplist=droplist)
win.set_title(title)
win.set_icon(frame.images["icon"])
win.set_default_size(300, 100)
win.show()
gtk.main()
return win.ret
def Option_Box(frame, title="Option Box", message="", default_text='',
modal= True, option1="", option2="", option3="", status=None ):
win = OptionDialog(frame, message, modal=modal, option3=option3, option1=option1, option2=option2, status=status)
win.set_title(title)
win.set_icon(frame.images["icon"])
win.show()
gtk.main()
return win.ret
class OptionDialog( gtk.Dialog):
def __init__(self, frame, message="",modal= False, option1="", option2="", option3="", status=None):
gtk.Dialog.__init__(self)
self.connect("destroy", self.quit)
self.connect("delete_event", self.quit)
self.set_modal(modal)
box = gtk.VBox(spacing=10)
box.set_border_width(10)
self.vbox.pack_start(box)
box.show()
hbox = gtk.HBox(spacing=5)
hbox.set_border_width(5)
hbox.show()
box.pack_start(hbox)
if status:
image = gtk.Image()
image.set_padding(0, 0)
if status == "warning":
icon = gtk.STOCK_DIALOG_WARNING
else:
icon = gtk.STOCK_DIALOG_QUESTION
image.set_from_stock(icon, 4)
image.show()
hbox.pack_start(image)
if message:
label = gtk.Label(message)
hbox.pack_start(label)
label.set_line_wrap(True)
label.show()
if option1 is not None:
button1 = gtk.Button(option1)
button1.connect("clicked", self.option1)
button1.set_flags(gtk.CAN_DEFAULT)
self.action_area.pack_start(button1)
button1.show()
if option2 is not None:
button2 = gtk.Button(option2)
button2.connect("clicked", self.option2)
button2.set_flags(gtk.CAN_DEFAULT)
self.action_area.pack_start(button2)
button2.show()
button2.grab_default()
if option3 is not None:
button3 = gtk.Button(option3)
button3.connect("clicked", self.option3)
button3.set_flags(gtk.CAN_DEFAULT)
self.action_area.pack_start(button3)
button3.show()
self.ret = None
def quit(self, w=None, event=None):
self.hide()
self.destroy()
gtk.main_quit()
def option3(self, button3):
self.ret = 3
self.quit()
def option1(self, button1):
self.ret = 1
self.quit()
def option2(self, button2):
self.ret = 2
self.quit()