--- /dev/null
+commit 204aa75536d5508ca326bddd273d7d7e617109b1
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Tue Aug 16 19:27:39 2011 +0000
+
+ pep fixes to dialogs (pysrvsvc.py)
+
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index b433d6d..5fa6e0c 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python2.6
++#!/usr/bin/python
+ # -*- coding: utf-8 -*-
+
+ # pysrvsvc.py
+@@ -24,8 +24,6 @@
+ #
+ #
+
+-
+-
+ """ srvsvc related dialogues"""
+
+ import gtk
+@@ -33,7 +31,6 @@ import gobject
+ import os
+ import sys
+
+-
+ from samba.dcerpc import srvsvc
+
+
+@@ -41,15 +38,9 @@ class srvsvcConnectDialog(gtk.Dialog):
+
+ """Connect Dialog"""
+
+- def __init__(
+- self,
+- server,
+- transport_type,
+- username,
+- password='',
+- ):
+- super(srvsvcConnectDialog, self).__init__()
++ def __init__(self, server, transport_type, username, password=''):
+
++ super(srvsvcConnectDialog, self).__init__()
+
+ self.server_address = server
+ self.username = username
+@@ -61,6 +52,7 @@ class srvsvcConnectDialog(gtk.Dialog):
+ self.set_modal(True)
+
+ self.update_sensitivity()
++ self.about_dialog = gtk.AboutDialog()
+
+ def create(self):
+ self.set_title('Connect to Samba Share Server')
+@@ -72,10 +64,10 @@ class srvsvcConnectDialog(gtk.Dialog):
+ self.vbox.set_spacing(5)
+
+ # artwork TODO remove post decession
+-
++
+ self.artwork = gtk.VBox()
+
+- self.samba_image_filename = os.path.join(sys.path[0],'images',
++ self.samba_image_filename = os.path.join(sys.path[0], 'images',
+ 'samba-logo-small.png')
+ self.samba_image = gtk.Image()
+ self.samba_image.set_from_file(self.samba_image_filename)
+@@ -106,37 +98,44 @@ class srvsvcConnectDialog(gtk.Dialog):
+
+ label = gtk.Label(' Server address: ')
+ label.set_alignment(0, 0.5)
+- table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.server_address_entry = gtk.Entry()
+ self.server_address_entry.set_text(self.server_address)
+ self.server_address_entry.set_activates_default(True)
+- self.server_address_entry.set_tooltip_text('Enter the Server Address')
+- table.attach(self.server_address_entry, 1, 2, 0, 1, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++ self.server_address_entry.set_tooltip_text(
++ 'Enter the Server Address')
++ table.attach(self.server_address_entry, 1, 2, 0, 1,
++ gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+
+ label = gtk.Label(' Username: ')
+ label.set_alignment(0, 0.5)
+- table.attach(label,0,1,1,2,gtk.FILL,gtk.FILL | gtk.EXPAND,0,0)
++ table.attach(label, 0, 1, 1, 2, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.username_entry = gtk.Entry()
+ self.username_entry.set_text(self.username)
+ self.username_entry.set_activates_default(True)
+ self.username_entry.set_tooltip_text('Enter your Username')
+- table.attach(self.username_entry,1,2,1,2,gtk.FILL | gtk.EXPAND,gtk.FILL | gtk.EXPAND,1,1)
++ table.attach(self.username_entry, 1, 2, 1, 2,
++ gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+
+ label = gtk.Label(' Password: ')
+ label.set_alignment(0, 0.5)
+- table.attach(label, 0, 1, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 2, 3, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.password_entry = gtk.Entry()
+ self.password_entry.set_text(self.password)
+ self.password_entry.set_visibility(False)
+ self.password_entry.set_activates_default(True)
+ self.password_entry.set_tooltip_text('Enter your Password')
+- table.attach(self.password_entry, 1, 2, 2, 3, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++ table.attach(self.password_entry, 1, 2, 2, 3,
++ gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+
+ # transport frame
+-
++
+ self.transport_frame = gtk.Frame(' Transport type ')
+ self.vbox.pack_start(self.transport_frame, False, True, 0)
+
+@@ -146,21 +145,22 @@ class srvsvcConnectDialog(gtk.Dialog):
+
+ self.rpc_smb_tcpip_radio_button = gtk.RadioButton(None,
+ 'RPC over SMB over TCP/IP ')
+- self.rpc_smb_tcpip_radio_button.set_tooltip_text('ncacn_np type : Recomended (default)'
+- ) # # according MS-SRVS specification
++ self.rpc_smb_tcpip_radio_button.set_tooltip_text(
++ 'ncacn_np type : Recomended (default)')
++ # Default according MS-SRVS specification
++
+ self.rpc_smb_tcpip_radio_button.set_active(self.transport_type
+ == 0)
+ vbox.pack_start(self.rpc_smb_tcpip_radio_button)
+
+-
+ self.rpc_tcpip_radio_button = \
+ gtk.RadioButton(self.rpc_smb_tcpip_radio_button,
+ 'RPC over TCP/IP')
+- self.rpc_tcpip_radio_button.set_tooltip_text('ncacn_ip_tcp type')
++ self.rpc_tcpip_radio_button.set_tooltip_text('ncacn_ip_tcp type'
++ )
+ self.rpc_tcpip_radio_button.set_active(self.transport_type == 1)
+ vbox.pack_start(self.rpc_tcpip_radio_button)
+
+-
+ self.localhost_radio_button = \
+ gtk.RadioButton(self.rpc_tcpip_radio_button, 'Localhost')
+ self.localhost_radio_button.set_tooltip_text('ncalrpc type') # # MS-SRVS specification
+@@ -188,42 +188,42 @@ class srvsvcConnectDialog(gtk.Dialog):
+ self.on_radio_button_toggled)
+
+ def get_server_address(self):
+- if self.get_transport_type() is 2:
+- return '127.0.0.1'
+- return self.server_address_entry.get_text().strip()
++ if self.get_transport_type() is 2:
++ return '127.0.0.1'
++ return self.server_address_entry.get_text().strip()
+
+ def get_username(self):
+- return self.username_entry.get_text().strip()
++ return self.username_entry.get_text().strip()
+
+ def get_password(self):
+- return self.password_entry.get_text()
++ return self.password_entry.get_text()
+
+ def update_sensitivity(self):
+- server_required = \
+- not self.localhost_radio_button.get_active()
+- self.server_address_entry.set_sensitive(server_required)
++ server_required = not self.localhost_radio_button.get_active()
++ self.server_address_entry.set_sensitive(server_required)
+
+ def get_transport_type(self):
+- if self.rpc_smb_tcpip_radio_button.get_active():
+- return 0
+- elif self.rpc_tcpip_radio_button.get_active():
+- return 1
+- elif self.localhost_radio_button.get_active():
+- return 2
+- else:
+- return -1
++ if self.rpc_smb_tcpip_radio_button.get_active():
++ return 0
++ elif self.rpc_tcpip_radio_button.get_active():
++ return 1
++ elif self.localhost_radio_button.get_active():
++ return 2
++ else:
++ return -1
+
+ def on_radio_button_toggled(self, widget):
+- self.update_sensitivity()
++ self.update_sensitivity()
+
+
+ class ShareAddEditDialog(gtk.Dialog):
+
+- """ Share add and edit dialog
++ """
++ Share add and edit dialog
+
+- If 'edit_mode' is set to True then in Edit mode .
+- Immutable fields are automatically greyed out.
+- """
++ If 'edit_mode' is set to True then in Edit mode .
++ Immutable fields are automatically greyed out.
++ """
+
+ def __init__(self, pipe_manager, share=None):
+ """ Class initialiser """
+@@ -232,12 +232,11 @@ class ShareAddEditDialog(gtk.Dialog):
+ self.pipe = pipe_manager
+ self.islocal = self.pipe.islocal
+
+-
+- if share is None :
++ if share is None:
+ self.edit_mode = 0
+ self.share = self.pipe.get_share_object()
+- else :
+- self.edit_mode = 1
++ else:
++ self.edit_mode = 1
+ self.share = share
+ self.share_to_fields()
+ self.create()
+@@ -245,10 +244,9 @@ class ShareAddEditDialog(gtk.Dialog):
+ self.set_window_mode()
+ self.set_modal(True)
+
+-
+-
+ def set_window_mode(self):
+ """ Deactivates a bunch of widgets in Edit mode """
++
+ if self.edit_mode:
+ self.share_name_entry.set_sensitive(False)
+ self.stype_disktree_radio_button.set_sensitive(False)
+@@ -257,70 +255,73 @@ class ShareAddEditDialog(gtk.Dialog):
+ self.sflag_temp_check_button.set_sensitive(False)
+ self.sflag_hidden_check_button.set_sensitive(False)
+
+-
+-
+- def get_stype_final(self):
++ def get_stype_final(self):
+ """ Calculates share type from base type and share flags """
++
+ stype = self.stype
+- if self.flags[0] :
++ if self.flags[0]:
+ stype |= srvsvc.STYPE_TEMPORARY
+- if self.flags[1] :
+- stype |= -(srvsvc.STYPE_HIDDEN)
++ if self.flags[1]:
++ stype |= -srvsvc.STYPE_HIDDEN
+ return stype
+
+-
+-
+ def validate_fields(self):
++ """ Checks for some Errors"""
+
+- if type(self) is ShareAddEditDialog :
++ if type(self) is ShareAddEditDialog:
+ name = self.share_name_entry.get_text()
+- elif type(self) is ShareWizardDialog :
++ elif type(self) is ShareWizardDialog:
+ name = self.sname
+
+ if len(name) == 0:
+- return "Share name may not be empty!"
++ return 'Share name may not be empty!'
+
+ if not self.pipe.name_validate(name):
+- return "Invalid Share name"
++ return 'Invalid Share name'
+
+- if (not self.edit_mode):
++ if not self.edit_mode:
+ for share in self.pipe.share_list:
+ if share.name == name:
+- return ' '.join(["A Share with the name : ", share.name ,"already exists!"])
++ return ' '.join(['A Share with the name : ',
++ share.name, 'already exists!'])
+
+ return None
+
+-
+-
+- def toggle_pwd_visiblity(self,widget,Junk):
++ def toggle_pwd_visiblity(self, widget, Junk):
+ """ Toggels Password visiblity"""
++
+ mode = self.set_pw_visiblity.get_active()
+ self.share_password_entry.set_visibility(mode)
+
+-
+-
+- def share_to_fields(self):
++ def share_to_fields(self):
+ """ Gets values from the share . """
++
+ self.sname = self.share.name
+- self.stype = self.pipe.get_share_type_info(self.share.type,'base_type')
+- self.flags = self.pipe.get_share_type_info(self.share.type,'flags')
++ self.stype = self.pipe.get_share_type_info(self.share.type,
++ 'base_type')
++ self.flags = self.pipe.get_share_type_info(self.share.type,
++ 'flags')
+ self.comment = self.share.comment
+ self.max_users = self.share.max_users
+ if self.share.password is None:
+- self.password = ""
++ self.password = ''
+ else:
+ self.password = self.share.password
+ self.path = self.share.path
+
+- def fields_to_gui (self):
+- """" Used to reset the gui fields from share fields on apply"""
++ def fields_to_gui(self):
++ """ Used to reset the gui fields from share fields on apply"""
++
+ self.share_name_entry.set_text(self.sname)
+ self.share_comment_entry.set_text(self.comment)
+ self.share_password_entry.set_text(self.password)
+
+- self.stype_disktree_radio_button.set_active(self.stype == srvsvc.STYPE_DISKTREE)
+- self.stype_printq_radio_button.set_active(self.stype == srvsvc.STYPE_PRINTQ )
+- self.stype_ipc_radio_button.set_active(self.stype == srvsvc.STYPE_IPC)
++ self.stype_disktree_radio_button.set_active(self.stype
++ == srvsvc.STYPE_DISKTREE)
++ self.stype_printq_radio_button.set_active(self.stype
++ == srvsvc.STYPE_PRINTQ)
++ self.stype_ipc_radio_button.set_active(self.stype
++ == srvsvc.STYPE_IPC)
+
+ self.sflag_temp_check_button.set_active(self.flags[0])
+ self.sflag_hidden_check_button.set_active(self.flags[1])
+@@ -331,91 +332,87 @@ class ShareAddEditDialog(gtk.Dialog):
+ self.file_entry.set_text(self.path)
+ self.max_users_spinbox.set_value(self.max_users)
+
+-
+-
+ def collect_fields(self):
+ """ Collects fields from the GUI and saves in class variables """
++
+ self.sname = self.share_name_entry.get_text()
+ self.comment = self.share_comment_entry.get_text()
+ self.password = self.share_password_entry.get_text()
++
+ # Now to handle the share type resolution
+- if self.stype_disktree_radio_button.get_active() :
++ if self.stype_disktree_radio_button.get_active():
+ self.stype = srvsvc.STYPE_DISKTREE
+- elif self.stype_printq_radio_button.get_active() :
++ elif self.stype_printq_radio_button.get_active():
+ self.stype = srvsvc.STYPE_PRINTQ
+ else:
+ self.stype = srvsvc.STYPE_IPC
+ # check flags
+- self.flags = [False,False]
++ self.flags = [False, False]
+ if self.sflag_temp_check_button.get_active():
+ self.flags[0] = True
+ if self.sflag_hidden_check_button.get_active():
+ self.flags[1] = True
+- if self.islocal :
++ if self.islocal:
+ self.path = self.file_button.get_filename()
+ else:
+ self.path = self.path_entry.get_text()
+ self.max_users = self.max_users_spinbox.get_value_as_int()
+
+-
+-
+- def fields_to_share(self):
++ def fields_to_share(self):
+ """ Modify a share type 502 object from the fields collected """
++
+ self.collect_fields()
+- self.share.name= self.sname
+- self.share.type= self.get_stype_final()
+- self.share.comment= self.comment
+- self.share.max_users= self.max_users
+- self.share.password= self.password
++ self.share.name = self.sname
++ self.share.type = self.get_stype_final()
++ self.share.comment = self.comment
++ self.share.max_users = self.max_users
++ self.share.password = self.password
+ self.share.path = self.pipe.fix_path_format(self.path)
+
+-
+-
+-
+-
+- def create(self):
++ def create(self):
+ """ Create the window """
+- self.set_title(' '.join([(" New Share",
+- " Edit Share : ")[self.edit_mode],self.sname]))
+- self.icon_name = ["network-folder","network-printer",
+- "network","network-pipe"][self.stype]
+- self.icon_filename = \
+- os.path.join(sys.path[0],"images",''.join([self.icon_name,'.png']))
++
++ self.set_title(' '.join([(' New Share', ' Edit Share : '
++ )[self.edit_mode], self.sname]))
++ self.icon_name = ['network-folder', 'network-printer', 'network'
++ , 'network-pipe'][self.stype]
++ self.icon_filename = os.path.join(sys.path[0], 'images',
++ ''.join([self.icon_name, '.png']))
+ self.set_icon_from_file(self.icon_filename)
+ self.vbox.set_spacing(3)
+ self.set_border_width(5)
+ self.set_decorated(True)
+ self.set_resizable(False)
+-
+-
+- #artwork
+- self.desc_box= gtk.HBox()
+- self.vbox.pack_start(self.desc_box,False,True,0)
++
++ # artwork
++ self.desc_box = gtk.HBox()
++ self.vbox.pack_start(self.desc_box, False, True, 0)
+
+ hbox = gtk.HBox()
+- icon = gtk.Image()
++ icon = gtk.Image()
+ icon.set_from_file(self.icon_filename)
+
+ hbox.pack_start(icon, False, True, 0)
+- self.desc_box.pack_start(hbox,False, True, 0)
+-
++ self.desc_box.pack_start(hbox, False, True, 0)
+
+ hbox = gtk.HBox()
+ label = gtk.Label()
+- if self.edit_mode :
+- label.set_markup("<b>%s</b>" %" ".join(["Editing The Share : ",self.sname]))
+- else :
+- label.set_markup("<b>Add a New Share</b>")
++ if self.edit_mode:
++ label.set_markup('<b>%s</b>'
++ % ' '.join(['Editing The Share : ',
++ self.sname]))
++ else:
++ label.set_markup('<b>Add a New Share</b>')
+ label.set_alignment(0.5, 0.5)
+ hbox.pack_start(label, True, True, 0)
+- self.desc_box.pack_start(hbox,True, True, 0)
+-
+- # the main form
++ self.desc_box.pack_start(hbox, True, True, 0)
++
++ # main form box
+
+ self.form_box = gtk.VBox()
+ self.vbox.pack_start(self.form_box, True, True, 0)
+-
+- # Name , password and comment (npc) frame
++
++ # Name , password and comment (npc) frame
+ frame = gtk.Frame()
+ label = gtk.Label('<b>Name and Comment</b>')
+ label.set_use_markup(True)
+@@ -423,58 +420,68 @@ class ShareAddEditDialog(gtk.Dialog):
+ self.form_box.pack_start(frame, True, True, 0)
+ frame.set_border_width(5)
+
+- table = gtk.Table(4,2)
++ table = gtk.Table(4, 2)
+ table.set_border_width(5)
+ table.set_row_spacings(1)
+ table.set_col_spacings(6)
+
+ frame.add(table)
+
+- label = gtk.Label(" Share Name : ")
++ label = gtk.Label(' Share Name : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.share_name_entry = gtk.Entry()
+ self.share_name_entry.set_tooltip_text('Enter the Share Name')
+ self.share_name_entry.set_text(self.sname)
+ self.share_name_entry.set_activates_default(True)
+
+- # dcesrv_srvsvc name check does this but just to reduce chances of an error limit max length
++ # dcesrv_srvsvc name check does this but just to reduce chances of an error limit max length
+ if self.flags[1]:
+ self.share_name_entry.set_max_length(12)
+ else:
+ self.share_name_entry.set_max_length(80)
+- table.attach(self.share_name_entry, 1, 2, 0, 1, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++ table.attach(self.share_name_entry, 1, 2, 0, 1,
++ gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+
+- label = gtk.Label(" Comment : ")
++ label = gtk.Label(' Comment : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 1, 2, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.share_comment_entry = gtk.Entry()
+- self.share_comment_entry.set_max_length(48) # max allowed is 48 MS-SRVS
++ self.share_comment_entry.set_max_length(48) # max allowed is 48 MS-SRVS
+ self.share_comment_entry.set_activates_default(True)
+ self.share_comment_entry.set_text(self.comment)
+- self.share_comment_entry.set_tooltip_text('Add a Comment or Description of the Share, Will default to share_type description')
+- table.attach(self.share_comment_entry, 1, 2, 1, 2, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++ self.share_comment_entry.set_tooltip_text('Add a Comment or Description of the Share, Will default to share_type description'
++ )
++ table.attach(self.share_comment_entry, 1, 2, 1, 2,
++ gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+
+ label = gtk.Label(' Password : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 2, 3, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.share_password_entry = gtk.Entry()
+ self.share_password_entry.set_activates_default(True)
+ self.share_password_entry.set_text(self.password)
+ self.share_password_entry.set_visibility(False)
+- self.share_password_entry.set_tooltip_text('Set a Share Password')
+- table.attach(self.share_password_entry, 1, 2, 2, 3, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+-
+- self.set_pw_visiblity = gtk.CheckButton("Visible")
+- self.set_pw_visiblity.set_tooltip_text('Enable or disable the password visiblity')
+- self.set_pw_visiblity.set_active(False)
+- self.set_pw_visiblity.connect("toggled",self.toggle_pwd_visiblity,None)
+- table.attach(self.set_pw_visiblity, 1, 2, 3, 4,gtk.SHRINK,gtk.FILL, 0, 0)
++ self.share_password_entry.set_tooltip_text(
++ 'Set a Share Password')
++ table.attach(self.share_password_entry, 1, 2, 2, 3,
++ gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+
+
++ self.set_pw_visiblity = gtk.CheckButton('Visible')
++ self.set_pw_visiblity.set_tooltip_text('Enable or disable the password visiblity'
++ )
++ self.set_pw_visiblity.set_active(False)
++ self.set_pw_visiblity.connect('toggled',
++ self.toggle_pwd_visiblity, None)
++ table.attach(self.set_pw_visiblity, 1, 2, 3, 4, gtk.SHRINK,
++ gtk.FILL, 0, 0)
+
+ # Share frame
+ frame = gtk.Frame()
+@@ -484,50 +491,63 @@ class ShareAddEditDialog(gtk.Dialog):
+
+ self.form_box.pack_start(frame, True, True, 0)
+
+- table = gtk.Table(1,2,True)
++ table = gtk.Table(1, 2, True)
+ frame.add(table)
+
+ # Base Share Types
+ vbox = gtk.VBox()
+ vbox.set_border_width(5)
+- table.attach(vbox,0,1,0,1,gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++ table.attach(vbox, 0, 1, 0, 1, gtk.FILL | gtk.EXPAND,
++ gtk.FILL | gtk.EXPAND, 1, 1)
+
+ # Radio buttons
+- self.stype_disktree_radio_button = gtk.RadioButton(None,'Disktree')
+- self.stype_disktree_radio_button.set_tooltip_text('Disktree (folder) type Share. Default')
+- self.stype_disktree_radio_button.set_active(self.stype == srvsvc.STYPE_DISKTREE)
++ self.stype_disktree_radio_button = gtk.RadioButton(None,
++ 'Disktree')
++ self.stype_disktree_radio_button.set_tooltip_text(
++ 'Disktree (folder) type Share. Default')
++ self.stype_disktree_radio_button.set_active(self.stype
++ == srvsvc.STYPE_DISKTREE)
+ vbox.pack_start(self.stype_disktree_radio_button)
+
+- self.stype_printq_radio_button = gtk.RadioButton(self.stype_disktree_radio_button,'Print Queue')
+- self.stype_printq_radio_button.set_tooltip_text('Shared Print Queue')
+- self.stype_printq_radio_button.set_active(self.stype == srvsvc.STYPE_PRINTQ)
+- #vbox.pack_start(self.stype_printq_radio_button)
+- #deactivating this option until samba4 is fixed TODO activate once base is fixed
+-
+- self.stype_ipc_radio_button = gtk.RadioButton(self.stype_printq_radio_button,'IPC ')
+- self.stype_ipc_radio_button.set_tooltip_text('Shared Interprocess Communication Pipe (IPC).')
+- self.stype_ipc_radio_button.set_active(self.stype == srvsvc.STYPE_IPC)
+- #vbox.pack_start(self.stype_ipc_radio_button)
++ self.stype_printq_radio_button = \
++ gtk.RadioButton(self.stype_disktree_radio_button,
++ 'Print Queue')
++ self.stype_printq_radio_button.set_tooltip_text(
++ 'Shared Print Queue')
++ self.stype_printq_radio_button.set_active(self.stype
++ == srvsvc.STYPE_PRINTQ)
++ # vbox.pack_start(self.stype_printq_radio_button)
++ # deactivating this option until samba4 is fixed TODO activate once base is fixed
++
++ self.stype_ipc_radio_button = \
++ gtk.RadioButton(self.stype_printq_radio_button, 'IPC ')
++ self.stype_ipc_radio_button.set_tooltip_text(
++ 'Shared Interprocess Communication Pipe (IPC).')
++ self.stype_ipc_radio_button.set_active(self.stype
++ == srvsvc.STYPE_IPC)
++ #vbox.pack_start(self.stype_ipc_radio_button)
+ #deactivating this option until samba4 is fixed TODO activate once base is fixed
+-
++
+ # Special Share Flags
+ vbox = gtk.VBox()
+ vbox.set_border_width(5)
+- table.attach(vbox,1,2,0,1,gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++ table.attach(vbox, 1, 2, 0, 1, gtk.FILL | gtk.EXPAND,
++ gtk.FILL | gtk.EXPAND, 1, 1)
+
+ # Check buttons
+ self.sflag_temp_check_button = gtk.CheckButton('Temporary')
+- self.sflag_temp_check_button.set_tooltip_text('Make share Temporary')
++ self.sflag_temp_check_button.set_tooltip_text(
++ 'Make share Temporary')
+ self.sflag_temp_check_button.set_active(self.flags[0])
+ vbox.pack_start(self.sflag_temp_check_button)
+
+ self.sflag_hidden_check_button = gtk.CheckButton('Hidden ')
+- self.sflag_hidden_check_button.set_tooltip_text('Make share hidden.')
++ self.sflag_hidden_check_button.set_tooltip_text(
++ 'Make share hidden.')
+ self.sflag_hidden_check_button.set_active(self.flags[1])
+ vbox.pack_start(self.sflag_hidden_check_button)
+
+ # Path frame
+-
+ frame = gtk.Frame()
+ label = gtk.Label('<b>Path</b>')
+ label.set_use_markup(True)
+@@ -535,31 +555,37 @@ class ShareAddEditDialog(gtk.Dialog):
+ self.form_box.pack_start(frame, True, True, 0)
+ frame.set_border_width(5)
+
+- table = gtk.Table(1,2)
++ table = gtk.Table(1, 2)
+ table.set_col_spacings(6)
+ frame.add(table)
+
+- label = gtk.Label("Share path : ")
++ label = gtk.Label('Share path : ')
+ label.set_alignment(0, 0.5)
+- table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
++ table.attach(label, 0, 1, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
++
+ # FIXME may need another parameter to select type of selctor in combination with local
+ # eg selecting a ipc / printer may be easier with a path
+
+- if self.islocal :
++ if self.islocal:
+ self.file_button = gtk.FileChooserButton('Browse')
+ self.file_button.set_current_folder(self.path)
+ self.file_button.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
+- self.file_button.set_tooltip_text('Select the folder to share')
+- table.attach(self.file_button, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ self.file_button.set_tooltip_text(
++ 'Select the folder to share')
++ table.attach(self.file_button, 1, 2, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
++
+ else:
+ self.file_entry = gtk.Entry()
+ self.file_entry.set_text(self.path)
+- self.file_entry.set_tooltip_text('Path to the folder to share')
+- table.attach(self.file_entry, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ self.file_entry.set_tooltip_text('Path to the folder to share'
++ )
++ table.attach(self.file_entry, 1, 2, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ # max users frame
+-
++
+ frame = gtk.Frame()
+ label = gtk.Label('<b>Max Users</b>')
+ label.set_use_markup(True)
+@@ -567,104 +593,111 @@ class ShareAddEditDialog(gtk.Dialog):
+ self.form_box.pack_start(frame, True, True, 0)
+ frame.set_border_width(5)
+
+- table = gtk.Table(1,2)
++ table = gtk.Table(1, 2)
+ table.set_col_spacings(6)
+ frame.add(table)
+
+- label = gtk.Label(" Max Users : ")
++ label = gtk.Label(' Max Users : ')
+ label.set_alignment(0, 0.5)
+- table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ # adjustment for max users spinbox
+- self.max_users_adjustment = gtk.Adjustment(self.max_users,1,0xFFFFFFFF,1,5)
++ self.max_users_adjustment = gtk.Adjustment(self.max_users, 1,
++ 0xFFFFFFFF, 1, 5)
+
+- self.max_users_spinbox = gtk.SpinButton(self.max_users_adjustment)
++ self.max_users_spinbox = \
++ gtk.SpinButton(self.max_users_adjustment)
+ self.max_users_spinbox.set_numeric(True)
+- self.max_users_spinbox.set_tooltip_text('Max Users for the Share')
+- table.attach(self.max_users_spinbox, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ self.max_users_spinbox.set_tooltip_text('Max Users for the Share'
++ )
++ table.attach(self.max_users_spinbox, 1, 2, 0, 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+ # action area
+-
++
+ self.action_area.set_layout(gtk.BUTTONBOX_END)
+
+- self.cancel_button = gtk.Button("Cancel", gtk.STOCK_CANCEL)
++ self.cancel_button = gtk.Button('Cancel', gtk.STOCK_CANCEL)
+ self.cancel_button.set_flags(gtk.CAN_DEFAULT)
+ self.add_action_widget(self.cancel_button, gtk.RESPONSE_CANCEL)
+
+- self.apply_button = gtk.Button("Apply", gtk.STOCK_APPLY)
++ self.apply_button = gtk.Button('Apply', gtk.STOCK_APPLY)
+ self.apply_button.set_flags(gtk.CAN_DEFAULT)
+ self.apply_button.set_sensitive(self.edit_mode)
+ self.add_action_widget(self.apply_button, gtk.RESPONSE_APPLY)
+
+- self.ok_button = gtk.Button("OK", gtk.STOCK_OK)
++ self.ok_button = gtk.Button('OK', gtk.STOCK_OK)
+ self.ok_button.set_flags(gtk.CAN_DEFAULT)
+ self.add_action_widget(self.ok_button, gtk.RESPONSE_OK)
+
+ self.set_default_response(gtk.RESPONSE_OK)
+
+
+-
+-
+ class DeleteDialog(gtk.Dialog):
++
+ """ The delete dialog """
+
+ def __init__(self, pipe_manager, share=None):
+ """ Class initialiser """
++
+ super(DeleteDialog, self).__init__()
+ self.pipe = pipe_manager
+ self.set_modal(True)
+
+-
+- if share is None :
+- raise KeyError("Non existant Share cannot be deleted")
++ if share is None:
++ raise KeyError('Non existant Share cannot be deleted')
+
+ self.share = share
+
+ # resolving some types that are required for gtk dialog creation
+- self.stype = self.pipe.get_share_type_info(self.share.type,'base_type')
+- self.flags = self.pipe.get_share_type_info(self.share.type,'flags')
+- self.generic_typestring = self.pipe.get_share_type_info(self.share.type,'typestring')
+- self.desc = self.pipe.get_share_type_info(self.share.type,'desc')
++
++ self.stype = self.pipe.get_share_type_info(self.share.type,
++ 'base_type')
++ self.flags = self.pipe.get_share_type_info(self.share.type,
++ 'flags')
++ self.generic_typestring = \
++ self.pipe.get_share_type_info(self.share.type, 'typestring')
++ self.desc = self.pipe.get_share_type_info(self.share.type,
++ 'desc')
+
+ self.create()
+ self.set_position(gtk.WIN_POS_CENTER)
+
+-
+-
+- def create(self):
++ def create(self):
+ """ Create the window """
+- self.set_title(' '.join([" Delete Share",self.share.name]))
+- self.icon_name = ["network-folder","network-printer",
+- "network","network-pipe"][self.stype]
+- self.icon_filename = \
+- os.path.join(sys.path[0],"images",''.join([self.icon_name,'.png']))
++
++ self.set_title(' '.join([' Delete Share', self.share.name]))
++ self.icon_name = ['network-folder', 'network-printer', 'network'
++ , 'network-pipe'][self.stype]
++ self.icon_filename = os.path.join(sys.path[0], 'images',
++ ''.join([self.icon_name, '.png']))
+ self.set_icon_from_file(self.icon_filename)
+ self.vbox.set_spacing(3)
+ self.set_border_width(5)
+ self.set_decorated(True)
+ self.set_resizable(False)
+
+-
+ #artwork
+- self.desc_box= gtk.HBox()
+- self.vbox.pack_start(self.desc_box,False,True,0)
++ self.desc_box = gtk.HBox()
++ self.vbox.pack_start(self.desc_box, False, True, 0)
+
+ hbox = gtk.HBox()
+- icon = gtk.Image()
++ icon = gtk.Image()
+ icon.set_from_file(self.icon_filename)
+
+ hbox.pack_start(icon, False, True, 0)
+- self.desc_box.pack_start(hbox,False, True, 0)
++ self.desc_box.pack_start(hbox, False, True, 0)
+
+ hbox = gtk.HBox()
+ label = gtk.Label()
+- label.set_text("You are deleting the share with the following properties")
++ label.set_text(
++ 'You are deleting the share with the following properties')
+ label.set_alignment(0, 0.5)
+ hbox.pack_start(label, True, True, 0)
+- self.desc_box.pack_start(hbox,True, True, 0)
+-
+- # the main form
++ self.desc_box.pack_start(hbox, True, True, 0)
+
++ # main form box
+ self.form_box = gtk.VBox()
+ self.vbox.pack_start(self.form_box, True, True, 0)
+
+@@ -675,7 +708,7 @@ class DeleteDialog(gtk.Dialog):
+ self.form_box.pack_start(frame, True, True, 0)
+ frame.set_border_width(5)
+
+- table = gtk.Table(11,2)
++ table = gtk.Table(11, 2)
+ table.set_border_width(5)
+ table.set_row_spacings(2)
+ table.set_col_spacings(6)
+@@ -684,117 +717,137 @@ class DeleteDialog(gtk.Dialog):
+
+ label = gtk.Label(' Share Name : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(self.share.name)
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 1, 2, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(' Comment : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 1, 2, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(self.share.comment)
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 1, 2, 1, 2, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(' Path : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 2, 3, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(self.share.path)
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 1, 2, 2, 3, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(' Password : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 3, 4, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 3, 4, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ if self.share.password:
+- label = gtk.Label("Share Password Enabled")
++ label = gtk.Label('Share Password Enabled')
+ else:
+- label = gtk.Label("Share Password Disabled")
++ label = gtk.Label('Share Password Disabled')
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, 3, 4, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 1, 2, 3, 4, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label('<b> Share Type</b>')
+ label.set_use_markup(True)
+ label.set_alignment(0, 0.5)
+- table.attach(label, 0, 1, 4, 5, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 4, 5, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(' Generic Typestring : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 5, 6, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 5, 6, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(self.generic_typestring)
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, 5, 6, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 1, 2, 5, 6, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+- label = gtk.Label(' Type Description : ') #spaces for Gui align do not change
++ label = gtk.Label(' Type Description : ') # spaces for Gui align do not change
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 6, 7, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 6, 7, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(self.desc)
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, 6, 7, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 1, 2, 6, 7, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
++
+
+ label = gtk.Label()
+ label.set_markup('<b> Special Flags </b>')
+ label.set_alignment(0, 0.5)
+- table.attach(label, 0, 1, 7, 8, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 7, 8, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(' Temporary : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 8, 9, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 8, 9, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(str(self.flags[0]))
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, 8, 9, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 1, 8, 9, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+- label = gtk.Label(' Hidden : ') #spaces for Gui align do not change
++ label = gtk.Label(' Hidden : ') # spaces for Gui align do not change
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 9, 10, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 9, 10, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(str(self.flags[1]))
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, 9, 10, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 1, 2, 9, 10, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(' Max Users : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 10, 11, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 10, 11, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(self.share.max_users)
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, 10, 11, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 1, 2, 10, 11, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+- box = gtk.VBox(3)
+- label = gtk.Label("Are yous sure you want to delete the share ?")
+- label.set_alignment(0.5,0.5)
+- box.pack_start(label,True,True,0)
+- warning ="(Please Note this is an irreversable action)"
++ box = gtk.VBox(3)
++ label = gtk.Label('Are yous sure you want to delete the share ?'
++ )
++ label.set_alignment(0.5, 0.5)
++ box.pack_start(label, True, True, 0)
++ warning = '(Please Note this is an irreversable action)'
+ label = gtk.Label('<span foreground="red">%s</span>' % warning)
+ label.set_use_markup(True)
+- label.set_alignment(0.5,0.5)
+- box.pack_start(label,True,True,0)
++ label.set_alignment(0.5, 0.5)
++ box.pack_start(label, True, True, 0)
+ box.set_border_width(5)
+
+- self.vbox.pack_start(box,True,True,0)
+-
+-
++ self.vbox.pack_start(box, True, True, 0)
+
+ # action area
+-
+ self.action_area.set_layout(gtk.BUTTONBOX_END)
+
+- self.cancel_button = gtk.Button("Cancel", gtk.STOCK_CANCEL)
++ self.cancel_button = gtk.Button('Cancel', gtk.STOCK_CANCEL)
+ self.cancel_button.set_flags(gtk.CAN_DEFAULT)
+ self.add_action_widget(self.cancel_button, gtk.RESPONSE_CANCEL)
+
+- self.ok_button = gtk.Button("Delete", gtk.STOCK_OK)
++ self.ok_button = gtk.Button('Delete', gtk.STOCK_OK)
+ self.add_action_widget(self.ok_button, gtk.RESPONSE_OK)
+
+ self.set_default_response(gtk.RESPONSE_OK)
+
++
+ class ShareWizardDialog(ShareAddEditDialog):
+
+ def create(self):
+@@ -802,12 +855,12 @@ class ShareWizardDialog(ShareAddEditDialog):
+ self.page = 0
+ self.set_default_size(400, 275)
+
+- self.main_box = gtk.VBox()
+- self.vbox.pack_start(self.main_box,True,True,0)
++ self.main_box = gtk.VBox()
++ self.vbox.pack_start(self.main_box, True, True, 0)
+
+ vbox = gtk.VBox()
+ vbox.set_border_width(5)
+- samba_image_filename = os.path.join(sys.path[0],'images',
++ samba_image_filename = os.path.join(sys.path[0], 'images',
+ 'samba-logo-small.png')
+ samba_image = gtk.Image()
+ samba_image.set_from_file(samba_image_filename)
+@@ -815,7 +868,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+ self.main_box.pack_start(vbox, False, True, 0)
+
+ vbox = gtk.VBox()
+- self.main_box.pack_start(vbox,True,True,0)
++ self.main_box.pack_start(vbox, True, True, 0)
+
+ frame = gtk.Frame()
+ frame.set_border_width(10)
+@@ -826,19 +879,18 @@ class ShareWizardDialog(ShareAddEditDialog):
+ frame.add(self.data_box)
+
+ self.title_label = gtk.Label()
+- self.title_label.set_alignment(0.05,0.5)
+- self.data_box.pack_start(self.title_label,False,True,1)
++ self.title_label.set_alignment(0.05, 0.5)
++ self.data_box.pack_start(self.title_label, False, True, 1)
+
+ self.info_label = gtk.Label()
+- self.info_label.set_alignment(.15,0.5)
+- self.data_box.pack_start(self.info_label,False,True,0)
++ self.info_label.set_alignment(.15, 0.5)
++ self.data_box.pack_start(self.info_label, False, True, 0)
+
+ self.fields_box = gtk.VBox()
+- self.data_box.pack_start(self.fields_box,True,True,3)
+-
++ self.data_box.pack_start(self.fields_box, True, True, 3)
+
+ # create all entities do not attach them so as to that they are refrenced
+- #name
++ # name
+ self.share_name_entry = gtk.Entry()
+ self.share_name_entry.set_tooltip_text('Enter the Share Name')
+ self.share_name_entry.set_text(self.sname)
+@@ -849,93 +901,98 @@ class ShareWizardDialog(ShareAddEditDialog):
+ else:
+ self.share_name_entry.set_max_length(80)
+
+- #comment
++ # comment
+ self.share_comment_entry = gtk.Entry()
+- self.share_comment_entry.set_max_length(48) # max allowed is 48 MS-SRVS
++ self.share_comment_entry.set_max_length(48) # max allowed is 48 MS-SRVS
+ self.share_comment_entry.set_activates_default(True)
+ self.share_comment_entry.set_text(self.comment)
+- self.share_comment_entry.set_tooltip_text('Add a Comment or Description of the Share, Will default to share_type description')
++ self.share_comment_entry.set_tooltip_text(
++ 'Add a Comment or Description of the Share. \
++ Will default to share_type description')
+
+- #password
++ # password
+ self.share_password_entry = gtk.Entry()
+ self.share_password_entry.set_activates_default(True)
+ self.share_password_entry.set_text(self.password)
+- self.share_password_entry.set_visibility(False)
+- self.share_password_entry.set_tooltip_text('Set a Share Password')
++ self.share_password_entry.set_tooltip_text(
++ 'Set a Share Password')
+
+ # For radio buttons we define other fields on the fly as these
+ # are lost on parent removal , and cause errors on draw .
+ # Radio buttons
+- self.stype_disktree_radio_button = gtk.RadioButton(None,'Disktree')
+- self.stype_printq_radio_button = gtk.RadioButton(self.stype_disktree_radio_button,'Print Queue')
+- self.stype_ipc_radio_button = gtk.RadioButton(self.stype_printq_radio_button,'IPC ')
++ self.stype_disktree_radio_button = gtk.RadioButton(None,
++ 'Disktree')
++ self.stype_printq_radio_button = \
++ gtk.RadioButton(self.stype_disktree_radio_button,
++ 'Print Queue')
++ self.stype_ipc_radio_button = \
++ gtk.RadioButton(self.stype_printq_radio_button, 'IPC ')
+
+ self.sflag_temp_check_button = gtk.CheckButton('Temporary')
+ self.sflag_hidden_check_button = gtk.CheckButton('Hidden ')
+
+- #path
++ # path
+ if self.islocal:
+ self.file_button = gtk.FileChooserButton('Browse')
+ else:
+ self.file_entry = gtk.Entry()
+
+- #max_users
+- self.max_users_adjustment = gtk.Adjustment(self.max_users,1,0xFFFFFFFF,1,5)
++ # max_users
++ self.max_users_adjustment = gtk.Adjustment(self.max_users, 1,
++ 0xFFFFFFFF, 1, 5)
+
+- self.max_users_spinbox = gtk.SpinButton(self.max_users_adjustment)
++ self.max_users_spinbox = \
++ gtk.SpinButton(self.max_users_adjustment)
+ self.max_users_spinbox.set_numeric(True)
+- self.max_users_spinbox.set_tooltip_text('Max Users for the Share')
+-
++ self.max_users_spinbox.set_tooltip_text(
++ 'Max Users for the Share')
+
+ self.action_area.set_layout(gtk.BUTTONBOX_CENTER)
+
+-
+- self.cancel_button = gtk.Button("Cancel", gtk.STOCK_CANCEL)
++ self.cancel_button = gtk.Button('Cancel', gtk.STOCK_CANCEL)
+ self.cancel_button.set_flags(gtk.CAN_DEFAULT)
+ self.add_action_widget(self.cancel_button, gtk.RESPONSE_CANCEL)
+
+ self.prev_button = gtk.Button(stock=gtk.STOCK_GO_BACK)
+- self.prev_button.connect("clicked",self.update_fields,-1)
++ self.prev_button.connect('clicked', self.update_fields, -1)
+ self.action_area.pack_start(self.prev_button, False, False, 10)
+
+ self.next_button = gtk.Button(stock=gtk.STOCK_GO_FORWARD)
+- self.next_button.connect("clicked", self.update_fields,+1)
++ self.next_button.connect('clicked', self.update_fields, +1)
+ self.action_area.pack_start(self.next_button, False, False, 0)
+
+- self.ok_button = gtk.Button("OK", gtk.STOCK_OK)
++ self.ok_button = gtk.Button('OK', gtk.STOCK_OK)
+ self.ok_button.set_flags(gtk.CAN_DEFAULT)
+ self.add_action_widget(self.ok_button, gtk.RESPONSE_OK)
+
+ self.set_default_response(gtk.RESPONSE_OK)
+- self.update_fields(None,0)
++ self.update_fields(None, 0)
+
+-
+- def update_fields(self,widget,change):
++ def update_fields(self, widget, change):
+ self.collect_fields()
+- self.page+=change
++ self.page += change
+ for widget in self.fields_box.get_children():
+ self.fields_box.remove(widget)
+
+- if self.page == 0 :
+- self.title_label.set_markup('<b>Welcome to the New Share Wizard</b>')
++ if self.page == 0:
++ self.title_label.set_markup(
++ '<b>Welcome to the New Share Wizard</b>')
+ self.info_label.set_text(' ')
+
+- label =gtk.Label('Please press next to continue.')
+- label.set_alignment(0,0.5)
+- self.fields_box.pack_start(label,False,True,0)
++ label = gtk.Label('Please press next to continue.')
++ label.set_alignment(0, 0.5)
++ self.fields_box.pack_start(label, False, True, 0)
+ self.fields_box.show_all()
+ self.prev_button.set_sensitive(False)
+ self.next_button.set_sensitive(True)
+ self.ok_button.set_sensitive(False)
+
+-
+-
+ self.fields_box.show_all()
+-
+-
+ elif self.page == 1:
++
+ self.title_label.set_markup('<b>Name and Password</b>')
+- self.info_label.set_text('Please enter a valid name and password (optional) for your share.')
++ self.info_label.set_text('Please enter a valid name and password (optional) for your share.'
++ )
+ self.prev_button.set_sensitive(True)
+ self.next_button.set_sensitive(True)
+ self.ok_button.set_sensitive(False)
+@@ -944,30 +1001,34 @@ class ShareWizardDialog(ShareAddEditDialog):
+ if self.password is not None:
+ self.share_comment_entry.set_text(self.password)
+
+- table = gtk.Table(2,2,True)
++ table = gtk.Table(2, 2, True)
+ table.set_border_width(5)
+ table.set_row_spacings(2)
+ table.set_col_spacings(6)
+
+- label = gtk.Label("* Share Name : ")
+- label.set_alignment(1,0.5)
++ label = gtk.Label('* Share Name : ')
++ label.set_alignment(1, 0.5)
+
+- table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- table.attach(self.share_name_entry, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.share_name_entry, 1, 2, 0, 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+- label = gtk.Label(" Share Password : ")
+- label.set_alignment(1,0.5)
+- table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- table.attach(self.share_password_entry, 1, 2, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ label = gtk.Label(' Share Password : ')
++ label.set_alignment(1, 0.5)
+
++ table.attach(label, 0, 1, 1, 2, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.share_password_entry, 1, 2, 1, 2,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+- self.fields_box.pack_start(table,False,True,0)
++ self.fields_box.pack_start(table, False, True, 0)
+ self.fields_box.show_all()
+-
+-
+ elif self.page == 2:
++
+ self.title_label.set_markup('<b>Comment and Max Users </b>')
+- self.info_label.set_text('Please enter a comment(optional) and select max users')
++ self.info_label.set_text(
++ 'Please enter a comment(optional) and select max users')
+ self.prev_button.set_sensitive(True)
+ self.next_button.set_sensitive(True)
+ self.ok_button.set_sensitive(False)
+@@ -975,80 +1036,93 @@ class ShareWizardDialog(ShareAddEditDialog):
+ self.share_comment_entry.set_text(self.comment)
+ self.max_users_spinbox.set_value(self.max_users)
+
+-
+- table = gtk.Table(2,2,True)
++ table = gtk.Table(2, 2, True)
+ table.set_border_width(5)
+ table.set_row_spacings(2)
+ table.set_col_spacings(6)
+
+- label = gtk.Label(" Share Comment :")
+- label.set_alignment(1,0.5)
+- table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- table.attach(self.share_comment_entry, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
+- label = gtk.Label(" Max Users : ")
+- label.set_alignment(1,0.5)
+- table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- table.attach(self.max_users_spinbox, 1, 2, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
+- self.fields_box.pack_start(table,False,True,0)
++ label = gtk.Label(' Share Comment :')
++ label.set_alignment(1, 0.5)
++ table.attach(label, 0, 1, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.share_comment_entry, 1, 2, 0, 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
++ label = gtk.Label(' Max Users : ')
++ label.set_alignment(1, 0.5)
++ table.attach(label, 0, 1, 1, 2, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.max_users_spinbox, 1, 2, 1, 2,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
++ self.fields_box.pack_start(table, False, True, 0)
+ self.fields_box.show_all()
+-
+ elif self.page == 3:
++
+ self.title_label.set_markup('<b>Share Type Options</b>')
+- self.info_label.set_text('Please select your share type options.')
++ self.info_label.set_text('Please select your share type options.'
++ )
+ self.prev_button.set_sensitive(True)
+ self.next_button.set_sensitive(True)
+ self.ok_button.set_sensitive(False)
+
+- # Radio buttons
+- self.stype_disktree_radio_button = gtk.RadioButton(None,'Disktree')
+- self.stype_disktree_radio_button.set_tooltip_text('Disktree (folder) type Share. Default')
+- self.stype_disktree_radio_button.set_active(self.stype == srvsvc.STYPE_DISKTREE)
+-
+- self.stype_printq_radio_button = gtk.RadioButton(self.stype_disktree_radio_button,'Print Queue')
+- self.stype_printq_radio_button.set_tooltip_text('Shared Print Queue')
+- self.stype_printq_radio_button.set_active(self.stype == srvsvc.STYPE_PRINTQ)
+-
+- self.stype_ipc_radio_button = gtk.RadioButton(self.stype_printq_radio_button,'IPC ')
+- self.stype_ipc_radio_button.set_tooltip_text('Shared Interprocess Communication Pipe (IPC).')
+- self.stype_ipc_radio_button.set_active(self.stype == srvsvc.STYPE_IPC)
++ self.stype_disktree_radio_button = gtk.RadioButton(None,
++ 'Disktree')
++ self.stype_disktree_radio_button.set_tooltip_text('Disktree (folder) type Share. Default'
++ )
++ self.stype_disktree_radio_button.set_active(self.stype
++ == srvsvc.STYPE_DISKTREE)
++
++ self.stype_printq_radio_button = \
++ gtk.RadioButton(self.stype_disktree_radio_button,
++ 'Print Queue')
++ self.stype_printq_radio_button.set_tooltip_text('Shared Print Queue'
++ )
++ self.stype_printq_radio_button.set_active(self.stype
++ == srvsvc.STYPE_PRINTQ)
++
++ self.stype_ipc_radio_button = \
++ gtk.RadioButton(self.stype_printq_radio_button, 'IPC ')
++ self.stype_ipc_radio_button.set_tooltip_text(
++ 'Shared Interprocess Communication Pipe (IPC).')
++ self.stype_ipc_radio_button.set_active(self.stype
++ == srvsvc.STYPE_IPC)
+
+- # Check buttons
+ self.sflag_temp_check_button = gtk.CheckButton('Temporary')
+- self.sflag_temp_check_button.set_tooltip_text('Make share Temporary')
++ self.sflag_temp_check_button.set_tooltip_text(
++ 'Make share Temporary')
+ self.sflag_temp_check_button.set_active(self.flags[0])
+
+ self.sflag_hidden_check_button = gtk.CheckButton('Hidden ')
+- self.sflag_hidden_check_button.set_tooltip_text('Make share hidden.')
++ self.sflag_hidden_check_button.set_tooltip_text(
++ 'Make share hidden.')
+ self.sflag_hidden_check_button.set_active(self.flags[1])
+
+- hbox = gtk.HBox(True,10)
++ hbox = gtk.HBox(True, 10)
+
+ vbox = gtk.VBox()
+ vbox.set_border_width(5)
+
+- vbox.pack_start(self.stype_disktree_radio_button,True,True,3)
+- vbox.pack_start(self.stype_printq_radio_button,True,True,3)
+- vbox.pack_start(self.stype_ipc_radio_button,True,True,3)
+- hbox.pack_start(vbox,True,True,0)
++ vbox.pack_start(self.stype_disktree_radio_button, True,
++ True, 3)
++ vbox.pack_start(self.stype_printq_radio_button, True, True,
++ 3)
++ vbox.pack_start(self.stype_ipc_radio_button, True, True, 3)
++ hbox.pack_start(vbox, True, True, 0)
+
+ vbox = gtk.VBox()
+ vbox.set_border_width(5)
+
+- vbox.pack_start(self.sflag_temp_check_button,True,True,3)
+- vbox.pack_start(self.sflag_hidden_check_button,True,True,3)
++ vbox.pack_start(self.sflag_temp_check_button, True, True, 3)
++ vbox.pack_start(self.sflag_hidden_check_button, True, True,
++ 3)
+
+- hbox.pack_start(vbox,True,True,0)
++ hbox.pack_start(vbox, True, True, 0)
+
+-
+-
+- self.fields_box.pack_start(hbox,True,True,0)
++ self.fields_box.pack_start(hbox, True, True, 0)
+ self.fields_box.show_all()
++ else:
+
+-
+-
+- else :
+ self.title_label.set_markup('<b>Path</b>')
+ if self.islocal:
+ self.info_label.set_text('Please select a valid path.')
+@@ -1058,71 +1132,74 @@ class ShareWizardDialog(ShareAddEditDialog):
+ self.next_button.set_sensitive(False)
+ self.ok_button.set_sensitive(True)
+
+- #path
+ if self.islocal:
+ self.file_button = gtk.FileChooserButton('Browse')
+ if self.path is not None:
+ self.file_button.set_current_folder(self.path)
+ else:
+- self.file_button.set_current_folder(".")
+- self.file_button.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
+- self.file_button.set_tooltip_text('Select the folder to share')
++ self.file_button.set_current_folder('.')
++ self.file_button.set_action(
++ gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
++ self.file_button.set_tooltip_text(
++ 'Select the folder to share')
+ else:
+ self.file_entry = gtk.Entry()
+ if self.path is not None:
+ self.file_entry.set_text(self.path)
+ else:
+- self.file_entry.set_text("")
+- self.file_entry.set_tooltip_text('Path to the folder to share')
++ self.file_entry.set_text('')
++ self.file_entry.set_tooltip_text(
++ 'Path to the folder to share')
+
+- table = gtk.Table(1,2,True)
++ table = gtk.Table(1, 2, True)
+ table.set_border_width(5)
+ table.set_row_spacings(2)
+ table.set_col_spacings(6)
+
+-
+ label = gtk.Label(' Path : ')
+- label.set_alignment(1,0.5)
+- table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- if self.islocal :
+- table.attach(self.file_button, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ label.set_alignment(1, 0.5)
++ table.attach(label, 0, 1, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
++ if self.islocal:
++ table.attach(self.file_button, 1, 2, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+ else:
+- table.attach(self.file_entry, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.file_entry, 1, 2, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+- self.fields_box.pack_start(table,False,True,0)
++ self.fields_box.pack_start(table, False, True, 0)
+ self.fields_box.show_all()
+
+- def collect_fields (self):
++ def collect_fields(self):
+ """ Custom collect fields from the GUI and saves in class variables which is page specific. """
++
+ if self.page == 0:
+ pass
++ elif self.page == 1:
+
+- elif self.page == 1 :
+ self.sname = self.share_name_entry.get_text()
+ self.password = self.share_password_entry.get_text()
+-
+-
+ elif self.page == 2:
++
+ self.comment = self.share_comment_entry.get_text()
+ self.max_users = self.max_users_spinbox.get_value_as_int()
++ elif self.page == 3:
+
+- elif self.page ==3 :
+- # Now to handle the share type resolution
+- if self.stype_disktree_radio_button.get_active() :
++ if self.stype_disktree_radio_button.get_active():
+ self.stype = srvsvc.STYPE_DISKTREE
+- elif self.stype_printq_radio_button.get_active() :
++ elif self.stype_printq_radio_button.get_active():
+ self.stype = srvsvc.STYPE_PRINTQ
+ else:
+ self.stype = srvsvc.STYPE_IPC
+- # check flags
+- self.flags = [False,False]
++
++ self.flags = [False, False]
+ if self.sflag_temp_check_button.get_active():
+ self.flags[0] = True
+ if self.sflag_hidden_check_button.get_active():
+ self.flags[1] = True
++ else:
+
+- else :
+- if self.islocal :
++ if self.islocal:
+ self.path = self.file_button.get_filename()
+ else:
+ self.path = self.path_entry.get_text()
+
+commit c0cfd5beb6c3290b8da6d441281c29527d2293fe
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Tue Aug 16 18:15:12 2011 +0000
+
+ fixes
+
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index 78d0852..9368bfa 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -23,6 +23,7 @@
+ # MA 02110-1301, USA.
+ #
+ #
++__docformat__ = 'restructuredtext'
+
+ import sys
+ import os.path
+@@ -45,13 +46,8 @@ from pysrvsvc import DeleteDialog, ShareAddEditDialog, \
+
+ class srvsvcPipeManager(object):
+
+- def __init__(
+- self,
+- server_address,
+- transport_type,
+- username,
+- password,
+- ):
++ def __init__(self, server_address, transport_type, username,
++ password):
+ """ Initialize the pipe object handling the srvsvc calls """
+
+ creds = credentials.Credentials()
+@@ -123,16 +119,19 @@ class srvsvcPipeManager(object):
+
+ @staticmethod
+ def get_share_type_info(stype, field):
+- """ Return the desired info about a share type
+- Retrievable types :
+- 'typestring' -> The generic name of the share type
+- 'desc' -> Description of the type
+- 'base_type' -> Base share type
+- 'flags' -> special flags (Boolean temporary, Boolean hidden)
+- ..........
+- Usage :
+- S.get_share_type_info(stype, field) -> desired information
+- """
++ """
++ Return the desired info about a share type
++ S.get_share_type_info(stype,field) -> desired information
++
++ Parameters:
++ 'field' : can be one of the below :
++ -`typestring`: The generic name of the share type
++ -`desc`: Description of the type
++ -`base_type`: Base share type
++ -`flags`: special flags (Boolean temporary,Boolean hidden)
++
++
++ """
+
+ base_dict = {
+ srvsvc.STYPE_DISKTREE: {'typestring': 'STYPE_DISKTREE',
+@@ -192,15 +191,15 @@ class srvsvcPipeManager(object):
+ return stype_info_dict.get(field)
+
+ def fix_path_format(self, path=''):
+- """ Fixes and checks the given path and convets it to the required format
+-
+- Convert the unix path to relavant Info Struct path for samba share object
+- It also checks for validity of path if it is local.
+- To be used for distktree (Files not IPC etc) type shares.
+- Usage :
+- S.fix_path_format(path= "") -> path
++ """
++ Fixes and checks the given path to make it in tthe correct format
+
+- """
++ Convert the unix path to relavant Info Struct path for samba
++ share object.It also checks for validity of path if it is local.
++ To be used for distktree (Files not IPC etc) type shares.
++ `Usage` :
++ S.fix_path_format(path= "") -> path
++ """
+
+ if self.islocal:
+ if path.startswith('C:'):
+@@ -219,8 +218,7 @@ class srvsvcPipeManager(object):
+
+ # NOT supported yet
+ def get_connections(self, level=1, max_buffer=-1):
+- """ DO NOT USE : UNSUPPORTED BY SAMBA-4 YET
+- """
++ """ DO NOT USE : UNSUPPORTED BY SAMBA-4 YET """
+
+ self.conn_list = []
+ info_ctr = srvsvc.NetConnInfoCtr()
+@@ -237,10 +235,9 @@ class srvsvcPipeManager(object):
+ def modify_share(self, share=None):
+ """ Modifies share 502 object.
+
+- Usage:
+- S.modify_share(self,share)-> parm_error
+-
+- """
++ Usage:
++ S.modify_share(self,share)-> parm_error
++ """
+
+ if share is None:
+ raise KeyError('Non existant Share cannot be modified')
+@@ -252,11 +249,14 @@ class srvsvcPipeManager(object):
+ return parm_error
+
+ def get_shares_list(self):
+- """ Updates the share list of the pipe object .
+- If show_all_shares is set to flase Hidden shares are set to
+- false and not returned It first tries to list all shares if
+- that fails it falls back to list standard shares and sets the
+- show_all_shares boolean accordingly"""
++ """
++ Updates the share list of the pipe object .
++
++ If show_all_shares is set to flase Hidden shares are set to
++ false and not returned .It first tries to list all shares if
++ that fails it falls back to list standard shares and sets the
++ show_all_shares boolean accordingly
++ """
+
+ if self.show_all_shares is False:
+ self.list_shares()
+@@ -264,19 +264,19 @@ class srvsvcPipeManager(object):
+ try:
+ self.list_shares_all()
+ self.show_all_shares = True
+- except:
++ except RuntimeError:
+ self.list_shares()
+ self.show_all_shares = False
+
+ def list_shares(self):
+- """ Gets a list of all (not hidden/special)active shares
+- and update the share and share_name list.
+-
+- Usage:
+- Recomended do not USE , use get_shares_list
+- S.list_shares() -> None
+- """
+-
++ """
++ Gets a list of all (not hidden/special)active shares and update
++ the share and share_name list.
++
++ `Usage`:
++ Recomended do not USE , use get_shares_list
++ S.list_shares() -> None
++ """
+ self.share_list = []
+ self.share_names_list = []
+ self.share_types_list = []
+@@ -293,11 +293,13 @@ class srvsvcPipeManager(object):
+ self.share_types_list.append(i.type)
+
+ def list_shares_all(self):
+- """ Gets a list of all (including hiden/special)active shares and update the share and share_name list.
++ """
++ Gets a list of all (including hiden/special)active shares and
++ update the share and share_name list.
+
+- Usage:
+- S.list_shares() -> None
+- """
++ `Usage`:
++ S.list_shares() -> None
++ """
+
+ self.share_list = []
+ self.share_names_list = []
+@@ -314,14 +316,14 @@ class srvsvcPipeManager(object):
+ self.share_types_list.append(i.type)
+
+ def add_share(self, share=None):
+- """Adds a share with a given name and type
+- This uses a share info 502 object.
+- Should be followed by modify_share to complete the addition of the share.
+-
+- Usage :
+- S.add_share(self, share=None) -> parm_error
++ """
++ Adds a share with a given name and type
++ This uses a share info 502 object.
++ Should be followed by modify_share to complete the addition of the share.
+
+- """
++ `Usage` :
++ S.add_share(self,share=None) -> parm_error
++ """
+
+ if share is None:
+ raise KeyError('Illegal to add an Empty Share ')
+@@ -333,11 +335,12 @@ class srvsvcPipeManager(object):
+ return parm_error
+
+ def get_share_info_local(self, name=''):
+- """ Gets share info for a share with a particular name from local cache lists.
++ """
++ Gets share info for a share with a particular name from local cache lists.
+
+- Usage:
+- S.get_share_info_local(self, name= "") -> sahre_info (502 type)
+- """
++ `Usage`:
++ S.get_share_info_local(self,name= "") -> sahre_info (502 type)
++ """
+
+ name = unicode(name)
+ for i in self.share_names_list:
+@@ -345,55 +348,55 @@ class srvsvcPipeManager(object):
+ return share_list[i.index()]
+
+ def get_share_info_rpc(self, name=''):
+- """ Gets share info for a share with a particular name from the rpc server.
++ """
++ Gets share info for a share with a particular name from the rpc server.
+
+- Usage:
+- S.get_share_info_local(self, name= "") -> sahre_info (502 type)
+- """
++ `Usage`:
++ S.get_share_info_local(self,name= "") -> sahre_info (502 type)
++ """
+
+ name = unicode(name)
+ info = self.pipe.NetShareGetInfo(self.server_unc, name, 502)
+ return info
+
+ def get_server_info(self):
+- """ Gets type 102 server info .
++ """
++ Gets type 102 server info .
+
+- Usage:
+- S.get_server_info() -> server_info
+- """
++ `Usage`:
++ S.get_server_info() -> server_info
++ """
+
+ server_info = self.pipe.NetSrvGetInfo(self.server_unc, 102)
+ return server_info
+
+ def delete_share(self, name=''):
+- """ Delete a share with the given name.
++ """
++ Delete a share with the given name.
+
+- Usage:
+- S.delete_share (self,name= "") -> Boolean indicating success or faliure ,[error object]
+- """
++ `Usage`:
++ S.delete_share (self,name= "") -> Boolean indicating success or faliure ,[error object]
++ """
+
+ name = unicode(name)
+ self.pipe.NetShareDel(self.server_unc, name, 0)
+
+ # NOT supported yet
+ def remove_persistance(self, name=''):
+- """ Removes persistance of a share .
+-
+- Usage: UNSUPPORTED YET
+- ........
+- """
++ """ Removes persistance of a share """
+
+ reserved = None
+ name = unicode(name)
+ self.pipe.NetShareDelSticky(self.server_unc, name, reserved)
+
+ def get_share_type(self, name=''):
+- """ Returns type of share code
+- uses local cache for now as the rpc server in samba4 does not support it yet
+- ........
+- Usage:
+- S.update_tod()
+- """
++ """
++ Returns type of share code
++
++ uses local cache for now as the rpc server in samba4 does not support it yet
++ `Usage`:
++ S.update_tod()
++ """
+
+ name = unicode(name)
+ for i in self.share_names_list:
+@@ -403,18 +406,14 @@ class srvsvcPipeManager(object):
+ raise KeyError('Share Does no exist')
+ return stype
+
+- def get_file_security(
+- self,
+- secdesc,
+- filename='',
+- filepath='',
+- ):
+- """ Returns a security descriptor buffer of a file .
+- Filepath must be full path relative to basepath of share's path.
++ def get_file_security(self, secdesc, filename='', filepath=''):
++ """
++ Returns a security descriptor buffer of a file .
++ Filepath must be full path relative to basepath of share's path.
+
+- Usage:
+- s.get_file_security(self,secdesc,sharename= " ",filepath= "")-> sd_buf
+- """
++ `Usage`:
++ S.get_file_security(self,secdesc,sharename="",filepath= "")-> sd_buf
++ """
+
+ filename = unicode(filename)
+ sd_buf = self.pipe.NetGetFileSecurity(self.server_unc, share,
+@@ -422,28 +421,26 @@ class srvsvcPipeManager(object):
+ return sd_buf
+
+ def get_tod(self):
+- """ Updates Time and date (TOD) Info of the pipe object.
+- ........
+- Usage:
+- update_tod() -> tod info object
+- """
++ """
++ Updates Time and date (TOD) Info of the pipe object.
++
++ `Usage`:
++ update_tod() -> tod info object
++ """
+
+ tod_info = self.pipe.NetRemoteTOD(self.server_unc)
+ return tod_info
+
+- def set_file_security(
+- self,
+- secdesc,
+- sd_buf,
+- sharename='',
+- filepath='',
+- ):
+- """ Sets the security of a file .
+- Filepath must be full path relative to basepath of share's path.
++ def set_file_security(self, secdesc, sd_buf, sharename='',
++ filepath=''):
++ """
++ Sets the security of a file .
++
++ Filepath must be full path relative to basepath of share's path.
+
+- Usage:
+- S.set_file_security (self,secdesc,sd_buf,sharename= "",filepath= "") -> Boolean succes,[error]
+- """
++ `Usage`:
++ S.set_file_security (self,secdesc,sd_buf,sharename= "",filepath= "") -> Boolean succes,[error]
++ """
+
+ sharename = unicode(sharename)
+ self.pipe.NetSetFileSecurity(self.server_unc, share, filename,
+@@ -452,13 +449,15 @@ class srvsvcPipeManager(object):
+ @staticmethod
+ def get_platform_info(platform_id, field):
+ """ Return the desired field.
+- Retrievable types :
+- 'typestring' : The generic name of the platform type
+- 'desc' : Description of the type
+
+- Usage:
+- S.get_platform_string(platform_id,field)-> desired_field
+- """
++ Parameters:
++ `field` can be any of the below'
++ `typestring` : The generic name of the platform type
++ `desc` : Description of the type
++
++ `Usage`:
++ S.get_platform_string(platform_id,field)-> desired_field
++ """
+
+ os_dict = {
+ srvsvc.PLATFORM_ID_DOS: {'typestring': 'PLATFORM_ID_DOS',
+@@ -474,20 +473,14 @@ class srvsvcPipeManager(object):
+ }
+ return os_dict.get(platform_id).get(field)
+
+- def get_share_object(
+- self,
+- name='',
+- stype=0,
+- comment='',
+- max_users=0xFFFFFFFF,
+- password='',
+- path='',
+- #permissions= None, it's a reserved section (MS-SRVS)
+- ):
+- """ Gets a 502 type share object.
+- Usage:
+- S.get_share_object(self,name= "",comment= "",max_users= 0xFFFFFFFF,password= "",path= "",permissions= None,sd_buf=None) -> share (502 type share object)
+- """
++ def get_share_object(self, name='', stype=0, comment='',
++ max_users=0xFFFFFFFF, password='', path=''):
++ """
++ Gets a 502 type share object.
++
++ Usage:
++ S.get_share_object(self,name= "",comment= "",max_users= 0xFFFFFFFF,password= "",path= "",permissions= None,sd_buf=None) -> share (502 type share object)
++ """
+
+ share = srvsvc.NetShareInfo502()
+
+@@ -504,29 +497,30 @@ class srvsvcPipeManager(object):
+ return share
+
+ def name_validate(self, name):
+- """ Validate a Given Share Name .
++ """
++ Validate a Given Share Name .
+ Returns True for a given share name and false for a invalid one .
+ It does so gracefully without raising a exception. Thus validating name cleanly
+- .....
+- Usage :
+- S.name_validate(name) -> Boolean Indicating Validity
+- """
++ `Usage` :
++ S.name_validate(name) -> Boolean Indicating Validity
++ """
+
+ try:
+ self.pipe.NetNameValidate(self.server_unc, name, 9,
+ 0)
+ return True
+- except:
++ except RuntimeError:
+ return False
+
+ def get_list_disks(self):
+- """ Returns a list of disk names on the system.
+- In samaba rpc server these are hard coded .
+- Refreshes Disk list of the pipe object.
+-............
+- Usage:
+- S.get_list_disks()-> None
+- """
++ """
++ Returns a list of disk names on the system.
++ In samaba rpc server these are hard coded .
++ Refreshes Disk list of the pipe object.
++
++ `Usage`:
++ S.get_list_disks()-> None
++ """
+
+ disk_info = srvsvc.NetDiskInfo()
+ self.disks_list = []
+@@ -543,15 +537,8 @@ class ShareWindow(gtk.Window):
+
+ """ Share management interface window """
+
+- def __init__(
+- self,
+- info_callback=None,
+- server='',
+- username='',
+- password='',
+- transport_type=0,
+- connect_now=False,
+- ):
++ def __init__(self, info_callback=None, server='', username='',
++ password='', transport_type=0, connect_now=False):
+ super(ShareWindow, self).__init__()
+
+ # It's nice to have this info saved when a user wants to reconnect
+@@ -564,14 +551,8 @@ class ShareWindow(gtk.Window):
+
+ self.create()
+ self.set_status('Disconnected.')
+- self.on_connect_item_activate(
+- None,
+- server,
+- transport_type,
+- username,
+- password,
+- connect_now,
+- )
++ self.on_connect_item_activate(None, server, transport_type,
++ username, password, connect_now)
+ self.show_all()
+ self.fill_active_pane()
+ self.fill_server_info()
+@@ -590,13 +571,7 @@ class ShareWindow(gtk.Window):
+ self.statusbar.pop(0)
+ self.statusbar.push(0, message)
+
+- def run_message_dialog(
+- self,
+- type,
+- buttons,
+- message,
+- parent=None,
+- ):
++ def run_message_dialog(self, type, buttons, message, parent=None):
+ if parent is None:
+ parent = self
+
+@@ -607,15 +582,10 @@ class ShareWindow(gtk.Window):
+
+ return response
+
+- def on_connect_item_activate(
+- self,
+- widget,
+- server='',
+- transport_type=0,
+- username='',
+- password='',
+- connect_now=False,
+- ):
++ def on_connect_item_activate(self, widget, server='',
++ transport_type=0, username='', password='',
++ connect_now=False):
++
+ transport_type = transport_type or self.transport_type
+ if transport_type is 2:
+ server = '127.0.0.1'
+@@ -624,14 +594,8 @@ class ShareWindow(gtk.Window):
+ username = username or self.username
+
+ try:
+- self.pipe_manager = self.run_connect_dialog(
+- None,
+- server,
+- transport_type,
+- username,
+- password,
+- connect_now,
+- )
++ self.pipe_manager = self.run_connect_dialog(None, server,
++ transport_type, username, password, connect_now)
+ if self.pipe_manager is not None:
+ self.pipe_manager.get_shares_list()
+ self.server_info = self.pipe_manager.server_info
+@@ -661,15 +625,8 @@ class ShareWindow(gtk.Window):
+ self.update_sensitivity()
+ self.fill_server_info()
+
+- def run_connect_dialog(
+- self,
+- pipe_manager,
+- server_address,
+- transport_type,
+- username,
+- password='',
+- connect_now=False,
+- ):
++ def run_connect_dialog(self, pipe_manager, server_address,
++ transport_type, username, password='', connect_now=False):
+
+ dialog = srvsvcConnectDialog(server_address, transport_type,
+ username, password)
+@@ -886,9 +843,8 @@ Please check your network connection.''',
+ label.set_alignment(1, 0.5)
+ attach_index = self.pipe_manager.disks_list.index(i)+2
+
+- table.attach(label, 0, 1, attach_index,
+- attach_index + 1, gtk.FILL,
+- gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, attach_index,attach_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.sd_frame.add(table)
+ self.sd_frame.show_all()
+@@ -927,12 +883,8 @@ Please check your network connection.''',
+ dialog.hide()
+ return response_id
+
+- def run_share_add_edit_dialog(
+- self,
+- share=None,
+- apply_callback=None,
+- wizard_mode=False,
+- ):
++ def run_share_add_edit_dialog(self, share=None, apply_callback=None,
++ wizard_mode=False):
+
+ if wizard_mode: # wizard only for a new share
+ dialog = ShareWizardDialog(self.pipe_manager, None)
+@@ -1126,12 +1078,7 @@ Please check your network connection.''',
+
+ self.refresh_shares_view()
+
+- def on_notebook_switch_page(
+- self,
+- widget,
+- page,
+- page_num,
+- ):
++ def on_notebook_switch_page(self, widget, page, page_num):
+ self.active_page_index = page_num
+ self.update_sensitivity()
+
+@@ -1223,10 +1170,8 @@ Please check your network connection.''',
+ def fill_active_pane(self):
+ """ Fills sthe active left pane """
+
+- try:
+- share = self.get_selected_share()
+- except:
+- share = None
++ share = self.get_selected_share()
++
+
+ widget_to_delete = \
+ self.shareinfo_frame.get_children()[0]
+@@ -1413,8 +1358,8 @@ Please check your network connection.''',
+ self.shareinfo_frame.show_all()
+
+ def create(self):
+-
+- # main window
++
++ # main window
+ self.set_title('Samba-Gtk Share Management Interface')
+ self.set_default_size(800, 600)
+ self.icon_filename = os.path.join(sys.path[0], 'images'
+@@ -1428,7 +1373,7 @@ Please check your network connection.''',
+ accel_group = gtk.AccelGroup()
+ toplevel_vbox = gtk.VBox(False, 0)
+ self.add(toplevel_vbox)
+-
++
+ # menu
+ self.menubar = gtk.MenuBar()
+ toplevel_vbox.pack_start(self.menubar, False, False, 0)
+@@ -1556,7 +1501,7 @@ Please check your network connection.''',
+ main_hbox = gtk.HBox()
+ self.share_notebook.append_page(main_hbox,
+ gtk.Label('Share Management'))
+-
++
+ # Share listing on left side
+ rvbox = gtk.VBox()
+ main_hbox.pack_start(rvbox, True, True, 0)
+@@ -1638,7 +1583,7 @@ Please check your network connection.''',
+ self.toggle_share_view_visiblity, None)
+
+ ### Right active widget :
+-
++
+ vbox = gtk.VBox()
+ main_hbox.pack_start(vbox, False, False, 0)
+
+@@ -1816,13 +1761,13 @@ Please check your network connection.''',
+ label.set_use_markup(True)
+ self.sd_frame.set_label_widget(label)
+ vbox.pack_start(self.sd_frame, False, False, 0)
+-
++
+ # status bar
+
+ self.statusbar = gtk.Statusbar()
+ self.statusbar.set_has_resize_grip(True)
+ toplevel_vbox.pack_end(self.statusbar, False, False, 0)
+-
++
+ # signals/events
+
+ self.connect('delete_event', self.on_self_delete)
+@@ -1896,14 +1841,9 @@ def ParseArgs(argv):
+ arguments = {}
+
+ try: # get arguments into a nicer format
+- (opts, args) = getopt.getopt(argv, 'chu:s:p:t:', [
+- 'help',
+- 'user=',
+- 'server=',
+- 'password=',
+- 'connect-now',
+- 'transport=',
+- ])
++ (opts, args) = getopt.getopt(argv, 'chu:s:p:t:', ['help',
++ 'user=', 'server=', 'password=', 'connect-now',
++ 'transport='])
+ except getopt.GetoptError:
+ PrintUsage()
+ sys.exit(2)
+
+commit 8ecfea095c473771b5a4583dd5d3b19687b694ef
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Tue Aug 16 14:58:16 2011 +0000
+
+ remove sys append by default, add gpl
+
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index 6a95184..78d0852 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -1,6 +1,29 @@
+- #!/usr/bin/python
++#!/usr/bin/python2.6
+ # -*- coding: utf-8 -*-
+
++# pygwshare.py
++# Frontends to Samba-Gtk Share Management
++#
++# Copyright 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>
++# Copyright 2011 Jelmer Vernooij <jelmer@samba.org>
++#
++# 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 3 of the License, 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.
++#
++#
++
+ import sys
+ import os.path
+ import traceback
+@@ -8,7 +31,7 @@ import getopt
+ import gobject
+ import gtk
+
+-sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++# sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
+ # default for ./configure.developer for use on python 2.7
+ # Unhash the above line if it is yor your config , else edit it as req
+
+
+commit 9473d0b8b1b7696c413625a0c9bd96ffa4c36a76
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Tue Aug 16 14:51:42 2011 +0000
+
+ pep fixes, statusbar fixed
+
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index 284c98d..6a95184 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -1,29 +1,6 @@
+-#!/usr/bin/python2.6
++ #!/usr/bin/python
+ # -*- coding: utf-8 -*-
+
+-# pygwshare.py
+-# Frontends to Samba-Gtk Share Management
+-#
+-# Copyright 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>
+-# Copyright 2011 Jelmer Vernooij <jelmer@samba.org>
+-#
+-# 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 3 of the License, 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.
+-#
+-#
+-
+ import sys
+ import os.path
+ import traceback
+@@ -31,22 +8,16 @@ import getopt
+ import gobject
+ import gtk
+
+-#sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
+-#for use against the default binaries from default .configure.developer for use on python 2.7
+-# Unhash the above line if it is yor your config , else edit it as required
++sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++# default for ./configure.developer for use on python 2.7
++# Unhash the above line if it is yor your config , else edit it as req
+
+ from samba import credentials
+-from samba.dcerpc import (
+- srvsvc,
+- security,
+- )
++from samba.dcerpc import srvsvc, security
++
+ from sambagtk.dialogs import AboutDialog
+-from pysrvsvc import (
+- DeleteDialog,
+- ShareAddEditDialog,
+- srvsvcConnectDialog,
+- ShareWizardDialog
+- )
++from pysrvsvc import DeleteDialog, ShareAddEditDialog, \
++ srvsvcConnectDialog, ShareWizardDialog
+
+
+ class srvsvcPipeManager(object):
+@@ -73,19 +44,21 @@ class srvsvcPipeManager(object):
+ creds.set_workstation('')
+ creds.set_password(password)
+
+- #binding = "ncacn_np:%s" # srvsvc allows only named pipes tcp/upd not allowed under MS-SRVS specifications
++ # binding = "ncacn_np:%s" # srvsvc allows only named pipes
++ # tcp/upd not allowed under MS-SRVS specifications
++
+
+ binding = ['ncacn_np:%s', 'ncacn_ip_tcp:%s', 'ncalrpc:%s'
+ ][transport_type]
+ if transport_type is 2:
+ server_address = '127.0.0.1'
+- # Not really necessary from the point of view of the pipe itself but later sections depend on it
++
+ self.pipe = srvsvc.srvsvc(binding % server_address,
+ credentials=creds)
+
+ # set up some basic parameters unique to the connection
+
+- self.server_unc = ''.join(['\\',server_address])
++ self.server_unc = ''.join(['\\', server_address])
+
+ # Retrive some info about the share server
+
+@@ -96,107 +69,107 @@ class srvsvcPipeManager(object):
+
+ self.resume_handle_conn = 0x00000000
+ self.resume_handle_share = 0x00000000
+- self.resume_handle = 0x00000000 # for general purposes where servers ignore this but it exists in the calls
++ self.resume_handle = 0x00000000
+ self.max_buffer = -1
+
+- # Initialise various cache lists :
+- # The idea is to use locally available share list and related conveiniece lists
+- # This should reduce the queries and improve performance
+- # The share list will be locally maintained any via the get_share_local_cache
+-
+- if server_address in ('127.0.0.1','localhost') :
++ if server_address in ('127.0.0.1', 'localhost'):
+ self.islocal = True
++ # Not really necessary from the point of view of the pipe itself but later sections depend on it
+ else:
+ self.islocal = False
++
++ # Initialise various cache lists :
++ # The idea is to use locally available share & related lists
++ # This should reduce the queries and improve performance
++ # The share list will be locally maintained and updated
++ # via the various methods (eg get_shares_list)
++
+ self.conn_list = []
+ self.share_list = []
+ self.share_names_list = []
+ self.share_types_list = []
+ self.get_list_disks()
++
+ # attempt to control listing of shares.
+ self.show_all_shares = False
+ self.get_shares_list()
+
+-
+-
+ def close(self):
+ pass
+ # apparently there's no .Close() method for this pipe
+
+-
+-
+ @staticmethod
+- def get_share_type_info(stype,field):
++ def get_share_type_info(stype, field):
+ """ Return the desired info about a share type
+ Retrievable types :
+ 'typestring' -> The generic name of the share type
+ 'desc' -> Description of the type
+ 'base_type' -> Base share type
+- 'flags' -> special flags (Boolean temporary,Boolean hidden)
++ 'flags' -> special flags (Boolean temporary, Boolean hidden)
+ ..........
+ Usage :
+- S.get_share_type_info(stype,field) -> desired information
++ S.get_share_type_info(stype, field) -> desired information
+ """
++
+ base_dict = {
+- srvsvc.STYPE_DISKTREE : {
+- 'typestring' :'STYPE_DISKTREE',
+- 'desc' : 'Disktree (Folder) Share'
+- },
+-
+- srvsvc.STYPE_PRINTQ : {
+- 'typestring' :'STYPE_PRINTQ',
+- 'desc' : 'Print Queue Share'
+- },
+-
+- srvsvc.STYPE_DEVICE : {
+- 'typestring' :'STYPE_DEVICE',
+- 'desc' : 'Device Share'
+- },
+-
+- srvsvc.STYPE_IPC : {
+- 'typestring' :'STYPE_IPC',
+- 'desc' : 'IPC Share'
+- }
+- }
++ srvsvc.STYPE_DISKTREE: {'typestring': 'STYPE_DISKTREE',
++ 'desc': 'Disktree (Folder) Share'},
++ srvsvc.STYPE_PRINTQ: {'typestring': 'STYPE_PRINTQ',
++ 'desc': 'Print Queue Share'},
++ srvsvc.STYPE_DEVICE: {'typestring': 'STYPE_DEVICE',
++ 'desc': 'Device Share'},
++ srvsvc.STYPE_IPC: {'typestring': 'STYPE_IPC',
++ 'desc': 'IPC Share'},
++ }
+
+ flag_temp = False
+ flag_hidden = False
+ if stype & srvsvc.STYPE_TEMPORARY:
+- flag_temp = True
++ flag_temp = True
+ if stype & srvsvc.STYPE_HIDDEN:
+- flag_hidden = True
+-
+- if flag_temp is True and flag_hidden is False :
+- stype_base = stype - srvsvc.STYPE_TEMPORARY
+- stype_typestring = ''.join([base_dict.get(stype_base).get('typestring'),'_TEMPORARY'])
+- stype_desc = ' '.join(['Temporary',base_dict.get(stype_base).get('desc') ])
+-
+- elif flag_temp is False and flag_hidden is True :
+- stype_base = stype + srvsvc.STYPE_HIDDEN
+- stype_typestring = ''.join([base_dict.get(stype_base).get('typestring'),'_HIDDEN'])
+- stype_desc = ' '.join(['Hidden',base_dict.get(stype_base).get('desc') ])
+-
+- elif flag_temp is True and flag_hidden is True :
+- stype_base = stype - srvsvc.STYPE_TEMPORARY + srvsvc.STYPE_HIDDEN
+- stype_typestring = ''.join([base_dict.get(stype_base).get('typestring'),'_TEMPORARY_HIDDEN'])
+- stype_desc = ' '.join(['Temporary Hidden',base_dict.get(stype_base).get('desc') ])
++ flag_hidden = True
++
++ if flag_temp is True and flag_hidden is False:
++ stype_base = stype - srvsvc.STYPE_TEMPORARY
++ base_str = base_dict.get(stype_base).get('typestring')
++ stype_typestring = ''.join([base_str, '_TEMPORARY'])
++ stype_desc = ' '.join(['Temporary',
++ base_dict.get(stype_base).get('desc'
++ )])
++ elif flag_temp is False and flag_hidden is True:
++
++ stype_base = stype + srvsvc.STYPE_HIDDEN
++ base_str = base_dict.get(stype_base).get('typestring')
++ stype_typestring = ''.join([base_str, '_HIDDEN'])
++ stype_desc = ' '.join(['Hidden',
++ base_dict.get(stype_base).get('desc'
++ )])
++ elif flag_temp is True and flag_hidden is True:
++
++ stype_base = stype - srvsvc.STYPE_TEMPORARY\
++ + srvsvc.STYPE_HIDDEN
++ base_str = base_dict.get(stype_base).get('typestring')
++ stype_typestring = ''.join([base_str, '_TEMPORARY_HIDDEN'])
++ stype_desc = ' '.join(['Temporary Hidden',
++ base_dict.get(stype_base).get('desc'
++ )])
+ else:
+ stype_base = stype
+- stype_typestring = base_dict.get(stype_base).get('typestring')
++ stype_typestring = \
++ base_dict.get(stype_base).get('typestring')
+ stype_desc = base_dict.get(stype_base).get('desc')
+
+- stype_info_dict = {'typestring':stype_typestring,
+- 'desc':stype_desc,
+- 'base_type':stype_base,
+- 'flags':[flag_temp,flag_hidden]
+- }
++ stype_info_dict = {
++ 'typestring': stype_typestring,
++ 'desc': stype_desc,
++ 'base_type': stype_base,
++ 'flags': [flag_temp, flag_hidden],
++ }
+
+ return stype_info_dict.get(field)
+
+-
+-
+- def fix_path_format(self,path=''):
+- """ Fixes and checks the given path to make it in tthe correct format
++ def fix_path_format(self, path=''):
++ """ Fixes and checks the given path and convets it to the required format
+
+ Convert the unix path to relavant Info Struct path for samba share object
+ It also checks for validity of path if it is local.
+@@ -205,54 +178,49 @@ class srvsvcPipeManager(object):
+ S.fix_path_format(path= "") -> path
+
+ """
+- if self.islocal :
++
++ if self.islocal:
+ if path.startswith('C:'):
+- path = path[2:].replace('\\','/')
++ path = path[2:].replace('\\', '/')
+ if os.path.exists(path):
+ path = os.path.realpath(path) # gets canonical path
+ else:
+- raise OSError("Path does not exist !")
++ raise OSError('Path does not exist !')
+
+ if path.startswith('/'):
+ path = path.replace('/', '\\')
+- path = ''.join(['C:',path])
++ path = ''.join(['C:', path])
+ path = unicode(path)
+
+ return path
+
+-
+-
+ # NOT supported yet
+- def get_connections(
+- self,
+- level = 1,
+- max_buffer = -1,
+- ):
++ def get_connections(self, level=1, max_buffer=-1):
+ """ DO NOT USE : UNSUPPORTED BY SAMBA-4 YET
+ """
++
+ self.conn_list = []
+ info_ctr = srvsvc.NetConnInfoCtr()
+- info_ctr.level = level #
+- (no_ent,info_ctr,resume_handle) = \
++ info_ctr.level = level #
++ (no_ent, info_ctr, resume_handle) = \
+ self.pipe.NetConnEnum(server_unc,
+- self.server_info_basic.path,
+- info_ctr,max_buffer,
+- self.resume_handle_conn)
+- if no_ent !=0 :
+- for i in info_ctr.ctr.array :
++ self.server_info_basic.path,
++ info_ctr, max_buffer,
++ self.resume_handle_conn)
++ if no_ent != 0:
++ for i in info_ctr.ctr.array:
+ self.conn_list.append(i)
+
+-
+-
+- def modify_share(self,share=None):
++ def modify_share(self, share=None):
+ """ Modifies share 502 object.
+
+ Usage:
+ S.modify_share(self,share)-> parm_error
+
+ """
++
+ if share is None:
+- raise KeyError("Non existant Share cannot be modified")
++ raise KeyError('Non existant Share cannot be modified')
+
+ parm_error = 0x00000000
+ name = share.name
+@@ -260,13 +228,12 @@ class srvsvcPipeManager(object):
+ 502, share, parm_error)
+ return parm_error
+
+-
+-
+- def get_shares_list(self):
++ def get_shares_list(self):
+ """ Updates the share list of the pipe object .
+- If show_all_shares is set to flase Hidden shares are set to false and not returned
+- It first tries to list all shares if that fails it falls back to list standard shares
+- and sets the show_all_shares boolean accordingly"""
++ If show_all_shares is set to flase Hidden shares are set to
++ false and not returned It first tries to list all shares if
++ that fails it falls back to list standard shares and sets the
++ show_all_shares boolean accordingly"""
+
+ if self.show_all_shares is False:
+ self.list_shares()
+@@ -278,15 +245,15 @@ class srvsvcPipeManager(object):
+ self.list_shares()
+ self.show_all_shares = False
+
+-
+-
+ def list_shares(self):
+- """ Gets a list of all (not hidden/special)active shares and update the share and share_name list.
++ """ Gets a list of all (not hidden/special)active shares
++ and update the share and share_name list.
+
+ Usage:
+ Recomended do not USE , use get_shares_list
+ S.list_shares() -> None
+ """
++
+ self.share_list = []
+ self.share_names_list = []
+ self.share_types_list = []
+@@ -302,14 +269,13 @@ class srvsvcPipeManager(object):
+ self.share_names_list.append(i.name)
+ self.share_types_list.append(i.type)
+
+-
+-
+ def list_shares_all(self):
+ """ Gets a list of all (including hiden/special)active shares and update the share and share_name list.
+
+ Usage:
+ S.list_shares() -> None
+ """
++
+ self.share_list = []
+ self.share_names_list = []
+ self.share_types_list = []
+@@ -324,75 +290,68 @@ class srvsvcPipeManager(object):
+ self.share_names_list.append(i.name)
+ self.share_types_list.append(i.type)
+
+-
+-
+ def add_share(self, share=None):
+ """Adds a share with a given name and type
+ This uses a share info 502 object.
+ Should be followed by modify_share to complete the addition of the share.
+
+ Usage :
+- S.add_share(self,share=None) -> parm_error
++ S.add_share(self, share=None) -> parm_error
+
+ """
+- if share is None :
+- raise KeyError("Illegal to add an Empty Share ")
++
++ if share is None:
++ raise KeyError('Illegal to add an Empty Share ')
+ # Uses the default 502 share info
++
+ parm_error = 0x00000000
+ parm_error = self.pipe.NetShareAdd(self.server_unc, 502, share,
+ parm_error)
+ return parm_error
+
+-
+-
+ def get_share_info_local(self, name=''):
+ """ Gets share info for a share with a particular name from local cache lists.
+
+ Usage:
+- S.get_share_info_local(self,name= "") -> sahre_info (502 type)
++ S.get_share_info_local(self, name= "") -> sahre_info (502 type)
+ """
++
+ name = unicode(name)
+ for i in self.share_names_list:
+ if name is i:
+ return share_list[i.index()]
+
+-
+-
+ def get_share_info_rpc(self, name=''):
+ """ Gets share info for a share with a particular name from the rpc server.
+
+ Usage:
+- S.get_share_info_local(self,name= "") -> sahre_info (502 type)
++ S.get_share_info_local(self, name= "") -> sahre_info (502 type)
+ """
++
+ name = unicode(name)
+ info = self.pipe.NetShareGetInfo(self.server_unc, name, 502)
+ return info
+
+-
+-
+- def get_server_info(self):
++ def get_server_info(self):
+ """ Gets type 102 server info .
+
+ Usage:
+ S.get_server_info() -> server_info
+ """
+- server_info=self.pipe.NetSrvGetInfo(self.server_unc, 102)
+- return server_info
+-
+
++ server_info = self.pipe.NetSrvGetInfo(self.server_unc, 102)
++ return server_info
+
+ def delete_share(self, name=''):
+ """ Delete a share with the given name.
+
+ Usage:
+- S.delete_share (self,name= "") -> Boolean indicating success or faliure ,[error object]
++ S.delete_share (self,name= "") -> Boolean indicating success or faliure ,[error object]
+ """
+
+ name = unicode(name)
+ self.pipe.NetShareDel(self.server_unc, name, 0)
+
+-
+-
+ # NOT supported yet
+ def remove_persistance(self, name=''):
+ """ Removes persistance of a share .
+@@ -401,12 +360,10 @@ class srvsvcPipeManager(object):
+ ........
+ """
+
+- reserved = None # to figure out what type python accepts maybee int or str
++ reserved = None
+ name = unicode(name)
+ self.pipe.NetShareDelSticky(self.server_unc, name, reserved)
+
+-
+-
+ def get_share_type(self, name=''):
+ """ Returns type of share code
+ uses local cache for now as the rpc server in samba4 does not support it yet
+@@ -420,11 +377,9 @@ class srvsvcPipeManager(object):
+ if name is i:
+ stype = share_types_list[i.index()]
+ else:
+- raise KeyError("Share Does no exist")
++ raise KeyError('Share Does no exist')
+ return stype
+
+-
+-
+ def get_file_security(
+ self,
+ secdesc,
+@@ -435,7 +390,7 @@ class srvsvcPipeManager(object):
+ Filepath must be full path relative to basepath of share's path.
+
+ Usage:
+- s.get_file_security(self,secdesc,sharename="",filepath= "")-> sd_buf
++ s.get_file_security(self,secdesc,sharename= " ",filepath= "")-> sd_buf
+ """
+
+ filename = unicode(filename)
+@@ -443,8 +398,6 @@ class srvsvcPipeManager(object):
+ filename, secdesc)
+ return sd_buf
+
+-
+-
+ def get_tod(self):
+ """ Updates Time and date (TOD) Info of the pipe object.
+ ........
+@@ -455,8 +408,6 @@ class srvsvcPipeManager(object):
+ tod_info = self.pipe.NetRemoteTOD(self.server_unc)
+ return tod_info
+
+-
+-
+ def set_file_security(
+ self,
+ secdesc,
+@@ -468,17 +419,15 @@ class srvsvcPipeManager(object):
+ Filepath must be full path relative to basepath of share's path.
+
+ Usage:
+- S.set_file_security (self,secdesc,sd_buf,sharename= "",filepath= "s") -> Boolean succes,[error]
++ S.set_file_security (self,secdesc,sd_buf,sharename= "",filepath= "") -> Boolean succes,[error]
+ """
+
+ sharename = unicode(sharename)
+ self.pipe.NetSetFileSecurity(self.server_unc, share, filename,
+ secdesc, sd_buf)
+
+-
+-
+ @staticmethod
+- def get_platform_info(platform_id,field):
++ def get_platform_info(platform_id, field):
+ """ Return the desired field.
+ Retrievable types :
+ 'typestring' : The generic name of the platform type
+@@ -489,47 +438,49 @@ class srvsvcPipeManager(object):
+ """
+
+ os_dict = {
+- srvsvc.PLATFORM_ID_DOS: {'typestring':'PLATFORM_ID_DOS','desc':'DOS'},
+- srvsvc.PLATFORM_ID_OS2: {'typestring':'PLATFORM_ID_OS2','desc':'OS2'},
+- srvsvc.PLATFORM_ID_NT: {'typestring':'PLATFORM_ID_NT','desc':'Windows NT or newer'},
+- srvsvc.PLATFORM_ID_OSF: {'typestring':'PLATFORM_ID_OSF','desc':'OSF/1'},
+- srvsvc.PLATFORM_ID_VMS: {'typestring':'PLATFORM_ID_VMS','desc':'VMS'},
++ srvsvc.PLATFORM_ID_DOS: {'typestring': 'PLATFORM_ID_DOS',
++ 'desc': 'DOS'},
++ srvsvc.PLATFORM_ID_OS2: {'typestring': 'PLATFORM_ID_OS2',
++ 'desc': 'OS2'},
++ srvsvc.PLATFORM_ID_NT: {'typestring': 'PLATFORM_ID_NT',
++ 'desc': 'Windows NT or newer'},
++ srvsvc.PLATFORM_ID_OSF: {'typestring': 'PLATFORM_ID_OSF',
++ 'desc': 'OSF/1'},
++ srvsvc.PLATFORM_ID_VMS: {'typestring': 'PLATFORM_ID_VMS',
++ 'desc': 'VMS'},
+ }
+ return os_dict.get(platform_id).get(field)
+
+-
+- def get_share_object (
++ def get_share_object(
+ self,
+- name= "",
+- stype= 0,
+- comment= '',
++ name='',
++ stype=0,
++ comment='',
+ max_users=0xFFFFFFFF,
+- password= '',
+- path= '',
+- #permissions= None, it's a reserved section , pointless passing a value.
+- sd_buf= None
++ password='',
++ path='',
++ #permissions= None, it's a reserved section (MS-SRVS)
+ ):
+ """ Gets a 502 type share object.
+ Usage:
+ S.get_share_object(self,name= "",comment= "",max_users= 0xFFFFFFFF,password= "",path= "",permissions= None,sd_buf=None) -> share (502 type share object)
+ """
++
+ share = srvsvc.NetShareInfo502()
+
+ share.comment = unicode(comment)
+ share.name = unicode(name)
+ share.type = stype
+ share.current_users = 0x00000000
+- share.max_users= max_users
++ share.max_users = max_users
+ share.password = password
+ share.path = path
+ share.permissions = 0
+- share.sd_buf = security.sec_desc_buf()
++ share.sd_buf = security.sec_desc_buf()
+
+ return share
+
+-
+-
+- def name_validate(self,name):
++ def name_validate(self, name):
+ """ Validate a Given Share Name .
+ Returns True for a given share name and false for a invalid one .
+ It does so gracefully without raising a exception. Thus validating name cleanly
+@@ -537,15 +488,14 @@ class srvsvcPipeManager(object):
+ Usage :
+ S.name_validate(name) -> Boolean Indicating Validity
+ """
++
+ try:
+- self.pipe.NetNameValidate(self.server_unc, name, 9, 0)
++ self.pipe.NetNameValidate(self.server_unc, name, 9,
++ 0)
+ return True
+ except:
+ return False
+
+-
+-
+-
+ def get_list_disks(self):
+ """ Returns a list of disk names on the system.
+ In samaba rpc server these are hard coded .
+@@ -560,19 +510,25 @@ class srvsvcPipeManager(object):
+ (disk_info, totalentries, self.resume_handle) = \
+ self.pipe.NetDiskEnum(self.server_unc, 0x00000000,
+ disk_info, 26, self.resume_handle)
+- if totalentries != 0 :
++ if totalentries != 0:
+ for i in disk_info.disks:
+- if i.disk != '': # disk lists returns a blank entry not of consequence to the program
++ if i.disk != '':
+ self.disks_list.append(i.disk)
+
+
+-
+-
+ class ShareWindow(gtk.Window):
++
+ """ Share management interface window """
+
+- def __init__ (self, info_callback=None, server="", username="", password="",
+- transport_type=0,connect_now=False):
++ def __init__(
++ self,
++ info_callback=None,
++ server='',
++ username='',
++ password='',
++ transport_type=0,
++ connect_now=False,
++ ):
+ super(ShareWindow, self).__init__()
+
+ # It's nice to have this info saved when a user wants to reconnect
+@@ -584,20 +540,25 @@ class ShareWindow(gtk.Window):
+ self.server_info = None
+
+ self.create()
+- self.set_status("Disconnected.")
+- self.on_connect_item_activate(None, server, transport_type, username, password, connect_now)
++ self.set_status('Disconnected.')
++ self.on_connect_item_activate(
++ None,
++ server,
++ transport_type,
++ username,
++ password,
++ connect_now,
++ )
+ self.show_all()
+ self.fill_active_pane()
+ self.fill_server_info()
+
+- # for easier further use
+-
+-
+ # This is used so the parent program can grab the server info after
+ # we've connected.
+ if info_callback is not None:
+- info_callback(server=self.server_address, username=self.username,
+- transport_type=self.transport_type)
++ info_callback(server=self.server_address,
++ username=self.username,
++ transport_type=self.transport_type)
+
+ def connected(self):
+ return self.pipe_manager is not None
+@@ -606,23 +567,32 @@ class ShareWindow(gtk.Window):
+ self.statusbar.pop(0)
+ self.statusbar.push(0, message)
+
+-
+-
+- def run_message_dialog(self, type, buttons, message, parent=None):
++ def run_message_dialog(
++ self,
++ type,
++ buttons,
++ message,
++ parent=None,
++ ):
+ if parent is None:
+ parent = self
+
+ message_box = gtk.MessageDialog(parent, gtk.DIALOG_MODAL, type,
+- buttons, message)
++ buttons, message)
+ response = message_box.run()
+ message_box.hide()
+
+ return response
+
+-
+-
+- def on_connect_item_activate(self, widget, server="", transport_type=0,
+- username="", password="", connect_now=False):
++ def on_connect_item_activate(
++ self,
++ widget,
++ server='',
++ transport_type=0,
++ username='',
++ password='',
++ connect_now=False,
++ ):
+ transport_type = transport_type or self.transport_type
+ if transport_type is 2:
+ server = '127.0.0.1'
+@@ -631,44 +601,57 @@ class ShareWindow(gtk.Window):
+ username = username or self.username
+
+ try:
+- self.pipe_manager = self.run_connect_dialog(None, server,
+- transport_type, username, password, connect_now)
++ self.pipe_manager = self.run_connect_dialog(
++ None,
++ server,
++ transport_type,
++ username,
++ password,
++ connect_now,
++ )
+ if self.pipe_manager is not None:
+ self.pipe_manager.get_shares_list()
+ self.server_info = self.pipe_manager.server_info
+
+- self.set_status("Connected to Server: IP=%s NETBios Name=%s." % (
+- self.server_address,self.pipe_manager.server_info.server_name))
+-
++ self.set_status(
++ 'Connected to Server: IP=%s NETBios Name=%s.'
++ % (self.server_address,
++ self.pipe_manager.server_info.server_name))
+ except RuntimeError, re:
+- msg = "Failed to connect: %s." % (re.args[1])
++
++ msg = 'Failed to connect: %s.' % re.args[1]
+ self.set_status(msg)
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
+-
++ self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++ msg)
+ except Exception, ex:
+- msg = "Failed to connect: %s." % (str(ex))
++
++ msg = 'Failed to connect: %s.' % str(ex)
+ self.set_status(msg)
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
+-
++ self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++ msg)
+
+ self.refresh_shares_view()
+ self.update_sensitivity()
+ self.fill_server_info()
+
++ def run_connect_dialog(
++ self,
++ pipe_manager,
++ server_address,
++ transport_type,
++ username,
++ password='',
++ connect_now=False,
++ ):
+
+-
+- def run_connect_dialog(self, pipe_manager, server_address, transport_type,
+- username, password="", connect_now=False):
+-
+-
+- dialog = srvsvcConnectDialog(server_address, transport_type, username, password)
++ dialog = srvsvcConnectDialog(server_address, transport_type,
++ username, password)
+ dialog.show_all()
+
+-
+ while True:
+ if connect_now:
+ connect_now = False
+@@ -689,39 +672,60 @@ class ShareWindow(gtk.Window):
+ self.username = username
+ password = dialog.get_password()
+
+- pipe_manager = srvsvcPipeManager(server_address, transport_type, username, password)
++ pipe_manager = srvsvcPipeManager(server_address,
++ transport_type, username, password)
+ break
+-
+-
+ except RuntimeError, re:
+- if re.args[1] == 'Logon failure': #user got the password wrong
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "Failed to connect: Invalid username or password.", dialog)
++
++ if re.args[1] == 'Logon failure': # user got the password wrong
++ self.run_message_dialog(gtk.MESSAGE_ERROR,
++ gtk.BUTTONS_OK,
++ 'Failed to connect: Invalid username or password.'
++ , dialog)
+ dialog.password_entry.grab_focus()
+- dialog.password_entry.select_region(0, -1) #select all the text in the password box
+- elif re.args[0] == 5 or re.args[1] == 'Access denied':
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "Failed to connect: Access Denied.", dialog)
++ dialog.password_entry.select_region(0,
++ -1) # select all the text in the password box
++ elif re.args[0] == 5 or re.args[1]\
++ == 'Access denied':
++ self.run_message_dialog(gtk.MESSAGE_ERROR,
++ gtk.BUTTONS_OK,
++ 'Failed to connect: Access Denied.',
++ dialog)
+ dialog.username_entry.grab_focus()
+- dialog.username_entry.select_region(0, -1)
+- elif re.args[1] == 'NT_STATUS_HOST_UNREACHABLE':
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "Failed to connect: Could not contact the server", dialog)
++ dialog.username_entry.select_region(0,
++ -1)
++ elif re.args[1]\
++ == 'NT_STATUS_HOST_UNREACHABLE':
++ self.run_message_dialog(gtk.MESSAGE_ERROR,
++ gtk.BUTTONS_OK,
++ 'Failed to connect: Could not contact the server'
++ , dialog)
+ dialog.server_address_entry.grab_focus()
+- dialog.server_address_entry.select_region(0, -1)
+- elif re.args[1] == 'NT_STATUS_NETWORK_UNREACHABLE':
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "Failed to connect: The network is unreachable.\n\nPlease check your network connection.", dialog)
++ dialog.server_address_entry.select_region(0,
++ -1)
++ elif re.args[1]\
++ == 'NT_STATUS_NETWORK_UNREACHABLE':
++ self.run_message_dialog(gtk.MESSAGE_ERROR,
++ gtk.BUTTONS_OK,
++ '''Failed to connect: The network is unreachable.
++
++Please check your network connection.''',
++ dialog)
+ else:
+- msg = "Failed to connect: %s." % (re.args[1])
++ msg = 'Failed to connect: %s.'\
++ % re.args[1]
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg, dialog)
+-
++ self.run_message_dialog(gtk.MESSAGE_ERROR,
++ gtk.BUTTONS_OK, msg, dialog)
+ except Exception, ex:
+- msg = "Failed to connect: %s." % (str(ex))
++
++ msg = 'Failed to connect: %s.' % str(ex)
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg, dialog)
+-
++ self.run_message_dialog(gtk.MESSAGE_ERROR,
++ gtk.BUTTONS_OK, msg, dialog)
+
+- #return RESPONSE_OK if we were told to auto-connect. Otherwise run the dialog
+ response_id = gtk.RESPONSE_OK or dialog.run()
+ dialog.hide()
+
+@@ -730,141 +734,169 @@ class ShareWindow(gtk.Window):
+
+ return pipe_manager
+
+-
+- def on_switch_fill_active_pane(self,widget):
++ def on_switch_fill_active_pane(self, widget):
+ """ Function doc """
++
+ self.fill_active_pane()
+
+ def on_update_sensitivity(self, widget):
+ self.update_sensitivity()
+
+-
+- def fill_server_info (self):
++ def fill_server_info(self):
+ """ Gracious fill out server info """
+- for widget in self.sd_frame.get_children() :
++
++ for widget in self.sd_frame.get_children():
+ if type(widget) is gtk.Table:
+ self.sd_frame.remove(widget)
+
+ if self.server_info is None:
+ self.srv_info_label.set_markup('<b>Server Disconnected</b>')
+
+-
+- my_lables = self.srvinfo_frame.get_children()[0].get_children()
+- for label in my_lables :
++ my_lables = \
++ self.srvinfo_frame.get_children()[0].get_children()
++ for label in my_lables:
+ label.set_sensitive(False)
+
+- #handle the disk data
+- table = gtk.Table(2,2,True)
++ table = gtk.Table(2, 2, True)
+ table.set_border_width(5)
+ table.set_row_spacings(4)
+ label = gtk.Label('Not connected to share server.')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
++ table.attach(label, 0, 1, 1, 2, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+ else:
+- self.srv_info_label.set_markup('<b>Share Server Details</b>')
+
+- my_lables = self.srvinfo_frame.get_children()[0].get_children()
+- for label in my_lables :
++ self.srv_info_label.set_markup('<b>Share Server Details</b>'
++ )
++
++ my_lables = \
++ self.srvinfo_frame.get_children()[0].get_children()
++ for label in my_lables:
+ label.set_sensitive(True)
+
+- label_data = self.pipe_manager.get_platform_info(
+- self.server_info.platform_id,'desc')
++ label_data = \
++ self.pipe_manager.get_platform_info(
++ self.server_info.platform_id, 'desc')
+ self.srvinfo_tos_label.set_text(label_data)
+- srv_type_genstr = self.pipe_manager.get_platform_info(
+- self.server_info.platform_id,'typestring')
+- self.srvinfo_name_label.set_text('\\'+self.server_info.server_name)
+- self.srvinfo_hidden_label.set_text(str(bool(self.server_info.hidden)))
++ srv_type_genstr = \
++ self.pipe_manager.get_platform_info(
++ self.server_info.platform_id, 'typestring')
++ self.srvinfo_name_label.set_text('\\'
++ + self.server_info.server_name)
++ self.srvinfo_hidden_label.set_text(
++ str(bool(self.server_info.hidden)))
+ self.srvinfo_comment_label.set_text(self.server_info.comment)
+- label_data = '.'.join([str(self.server_info.version_major),str(self.server_info.version_minor)])
++ label_data = '.'.join([str(self.server_info.version_major),
++ str(self.server_info.version_minor)])
+ self.srvinfo_version_label.set_text(label_data)
+ server_typedict = {
+- 0x00000001:('SV_TYPE_WORKSTATION','Workstation Service'),
+- 0x00000002:('SV_TYPE_SERVER','Server Service'),
+- 0x00000004:('SV_TYPE_SQLSERVER','SQL Server'),
+- 0x00000008:('SV_TYPE_DOMAIN_CTRL','Primary Domain Controller'),
+- 0x00000010:('SV_TYPE_DOMAIN_BAKCTRL','Backup Domain Controller'),
+- 0x00000020:('SV_TYPE_TIME_SOURCE','Time Source'),
+- 0x00000040:('SV_TYPE_AFP','Apple File Protocol Server'),
+- 0x00000080:('SV_TYPE_NOVELL','Novel Server'),
+- 0x00000100:('SV_TYPE_DOMAIN_MEMBER','LAN Manager 2.x Domain Member'),
+- 0x40000000:('SV_TYPE_LOCAL_LIST_ONLY','Server Maintained By the Browser'),
+- 0x00000200:('SV_TYPE_PRINTQ_SERVER','Print Queue Server'),
+- 0x00000400:('SV_TYPE_DIALIN_SERVER','Dial-In Server'),
+- 0x00000800:('SV_TYPE_XENIX_SERVER','Xenix Server'),
+- 0x00004000:('SV_TYPE_SERVER_MFPN','Microsoft File and Print for NetWare'),
+- 0x00001000:('SV_TYPE_NT','Windows NT/XP/2003 or Newer'),
+- 0x00002000:('SV_TYPE_WFW','Windows for Workgroups'),
+- 0x00008000:('SV_TYPE_SERVER_NT','Non DC Windows Server 2000/2003 or Newer'),
+- 0x00010000:('SV_TYPE_POTENTIAL_BROWSER','Potential Browser Service '),
+- 0x00020000:('SV_TYPE_BACKUP_BROWSER','Browser Service As Backup'),
+- 0x00040000:('SV_TYPE_MASTER_BROWSER','Master Browser Service'),
+- 0x00080000:('SV_TYPE_DOMAIN_MASTER','Domain Master Browser'),
+- 0x80000000:('SV_TYPE_DOMAIN_ENUM','Primary Domain'),
+- 0x00400000:('SV_TYPE_WINDOWS','Windows ME/98/95'),
+- 0xFFFFFFFF:('SV_TYPE_ALL','All Servers'),
+- 0x02000000:('SV_TYPE_TERMINALSERVER','Terminal Server'),
+- 0x10000000:('SV_TYPE_CLUSTER_NT','Server Cluster'),
+- 0x04000000:('SV_TYPE_CLUSTER_VS_NT','Virtual Server Cluster')
+- }
+-
+- label_data = server_typedict.get(self.server_info.server_type,('','Multiple Capablities'))[1]
++ 1: ('SV_TYPE_WORKSTATION',
++ 'Workstation Service'),
++ 2: ('SV_TYPE_SERVER', 'Server Service'),
++ 4: ('SV_TYPE_SQLSERVER', 'SQL Server'),
++ 8: ('SV_TYPE_DOMAIN_CTRL',
++ 'Primary Domain Controller'),
++ 0x00000010: ('SV_TYPE_DOMAIN_BAKCTRL',
++ 'Backup Domain Controller'),
++ 0x00000020: ('SV_TYPE_TIME_SOURCE', 'Time Source'),
++ 0x00000040: ('SV_TYPE_AFP', 'Apple File Protocol Server'
++ ),
++ 0x00000080: ('SV_TYPE_NOVELL', 'Novel Server'),
++ 0x00000100: ('SV_TYPE_DOMAIN_MEMBER',
++ 'LAN Manager 2.x Domain Member'),
++ 0x40000000: ('SV_TYPE_LOCAL_LIST_ONLY',
++ 'Server Maintained By the Browser'),
++ 0x00000200: ('SV_TYPE_PRINTQ_SERVER',
++ 'Print Queue Server'),
++ 0x00000400: ('SV_TYPE_DIALIN_SERVER', 'Dial-In Server'
++ ),
++ 0x00000800: ('SV_TYPE_XENIX_SERVER', 'Xenix Server'),
++ 0x00004000: ('SV_TYPE_SERVER_MFPN',
++ 'Microsoft File and Print for NetWare'),
++ 0x00001000: ('SV_TYPE_NT', 'Windows NT/XP/2003 or Newer'
++ ),
++ 0x00002000: ('SV_TYPE_WFW', 'Windows for Workgroups'),
++ 0x00008000: ('SV_TYPE_SERVER_NT',
++ 'Non DC Windows Server 2000/2003 or Newer'
++ ),
++ 0x00010000: ('SV_TYPE_POTENTIAL_BROWSER',
++ 'Potential Browser Service '),
++ 0x00020000: ('SV_TYPE_BACKUP_BROWSER',
++ 'Browser Service As Backup'),
++ 0x00040000: ('SV_TYPE_MASTER_BROWSER',
++ 'Master Browser Service'),
++ 0x00080000: ('SV_TYPE_DOMAIN_MASTER',
++ 'Domain Master Browser'),
++ 0x80000000: ('SV_TYPE_DOMAIN_ENUM', 'Primary Domain'),
++ 0x00400000: ('SV_TYPE_WINDOWS', 'Windows ME/98/95'),
++ 0xFFFFFFFF: ('SV_TYPE_ALL', 'All Servers'),
++ 0x02000000: ('SV_TYPE_TERMINALSERVER', 'Terminal Server'
++ ),
++ 0x10000000: ('SV_TYPE_CLUSTER_NT', 'Server Cluster'),
++ 0x04000000: ('SV_TYPE_CLUSTER_VS_NT',
++ 'Virtual Server Cluster'),
++ }
++
++ label_data = \
++ server_typedict.get(self.server_info.server_type, ('',
++ 'Multiple Capablities'))[1]
+ self.srvinfo_type_label.set_text(label_data)
+- self.srvinfo_upath_label.set_text(self.server_info.userpath.upper())
++ self.srvinfo_upath_label.set_text(
++ self.server_info.userpath.upper())
+ self.srvinfo_to_label.set_text(str(self.server_info.disc))
+ label_data = '/'.join([str(self.server_info.announce),
+- str(self.server_info.anndelta)])
++ str(self.server_info.anndelta)])
+ self.srvinfo_aa_label.set_text(label_data)
+
+- #handle server data windo
+- num_disks = len (self.pipe_manager.disks_list)
+- table = gtk.Table(num_disks+2,2,True)
++ num_disks = len(self.pipe_manager.disks_list)
++ table = gtk.Table(num_disks + 2, 2, True)
+ table.set_border_width(5)
+ table.set_row_spacings(4)
+ label = gtk.Label('<b> Disks </b>')
+ label.set_use_markup(True)
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- for i in self.pipe_manager.disks_list :
++ table.attach(label, 0, 1, 1, 2, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
++
++ for i in self.pipe_manager.disks_list:
+ label = gtk.Label(i)
+ label.set_alignment(1, 0.5)
+- attach_index = self.pipe_manager.disks_list.index(i) + 2
+- #Note : attcah ofsets for uniformity of gui , no other practical reason
+- table.attach(label, 0, 1, attach_index, attach_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ attach_index = self.pipe_manager.disks_list.index(i)+2
++
++ table.attach(label, 0, 1, attach_index,
++ attach_index + 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.sd_frame.add(table)
+ self.sd_frame.show_all()
+
+-
+-
+-
+-
+ def get_selected_share(self):
+ if not self.connected():
+ return None
+
+- (model, iter) = self.shares_tree_view.get_selection().get_selected()
+- if iter is None: # no selection
++ (model, iter) = \
++ self.shares_tree_view.get_selection().get_selected()
++ if iter is None: # no selection
+ return None
+ else:
+ share_name = model.get_value(iter, 0)
+- share_list = [share for share in self.pipe_manager.share_list if share.name == share_name]
++ share_list = [share for share in
++ self.pipe_manager.share_list if share.name
++ == share_name]
+ if len(share_list) > 0:
+ return share_list[0]
+ else:
+ return None
+
+-
+ def on_about_item_activate(self, widget):
+- dialog = AboutDialog("PyGWShare",
+- "A tool to manage user shares on a SRVS Share server.\n"
+- "Based on Jelmer Vernooij's original Samba-GTK",
+- self.icon_pixbuf)
+- #dialog.set_copyright("Copyright \xc2\xa9 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>")
++ dialog = AboutDialog('PyGWShare',
++ "A tool to manage user shares on a SRVS Share server.\nBased on Jelmer Vernooij's original Samba-GTK"
++ , self.icon_pixbuf)
++ dialog.set_copyright('Copyright \xc2\xa9 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>'
++ )
+ dialog.run()
+ dialog.hide()
+
+-
+ def run_delete_dialog(self, share=None):
+ dialog = DeleteDialog(self.pipe_manager, share)
+ dialog.show_all()
+@@ -872,17 +904,19 @@ class ShareWindow(gtk.Window):
+ dialog.hide()
+ return response_id
+
++ def run_share_add_edit_dialog(
++ self,
++ share=None,
++ apply_callback=None,
++ wizard_mode=False,
++ ):
+
+-
+- def run_share_add_edit_dialog(self, share= None, apply_callback= None,wizard_mode=False):
+-
+- if wizard_mode:
+- dialog = ShareWizardDialog(self.pipe_manager, None) # wizard only for a new share
++ if wizard_mode: # wizard only for a new share
++ dialog = ShareWizardDialog(self.pipe_manager, None)
+ else:
+ dialog = ShareAddEditDialog(self.pipe_manager, share)
+ dialog.show_all()
+
+- # loop to handle the applies
+ while True:
+ response_id = dialog.run()
+
+@@ -890,7 +924,8 @@ class ShareWindow(gtk.Window):
+ problem_msg = dialog.validate_fields()
+
+ if problem_msg is not None:
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, problem_msg, dialog)
++ self.run_message_dialog(gtk.MESSAGE_ERROR,
++ gtk.BUTTONS_OK, problem_msg, dialog)
+ else:
+ dialog.fields_to_share()
+
+@@ -902,8 +937,8 @@ class ShareWindow(gtk.Window):
+ if response_id == gtk.RESPONSE_OK:
+ dialog.hide()
+ break
+-
+ else:
++
+ dialog.hide()
+ return None
+
+@@ -911,9 +946,10 @@ class ShareWindow(gtk.Window):
+
+ def update_sensitivity(self):
+
+- connected = (self.pipe_manager is not None)
++ connected = self.pipe_manager is not None
+ share_page_active = not self.active_page_index
+- selected = (self.get_selected_share() is not None) and share_page_active
++ selected = self.get_selected_share() is not None\
++ and share_page_active
+
+ self.connect_item.set_sensitive(not connected)
+ self.disconnect_item.set_sensitive(connected)
+@@ -922,7 +958,8 @@ class ShareWindow(gtk.Window):
+ self.new_item.set_sensitive(connected and share_page_active)
+ self.delete_item.set_sensitive(connected and selected)
+ self.edit_item.set_sensitive(connected and selected)
+- self.new_share_wizard_item.set_sensitive(connected and share_page_active)
++ self.new_share_wizard_item.set_sensitive(connected
++ and share_page_active)
+
+ self.connect_button.set_sensitive(not connected)
+ self.disconnect_button.set_sensitive(connected)
+@@ -930,12 +967,15 @@ class ShareWindow(gtk.Window):
+ self.new_button.set_sensitive(connected and share_page_active)
+ self.delete_button.set_sensitive(connected and selected)
+ self.edit_button.set_sensitive(connected and selected)
+- self.new_share_wizard_button.set_sensitive(connected and share_page_active)
+-
+- self.active_frame_new_button.set_sensitive(connected and share_page_active)
+- self.active_frame_delete_button.set_sensitive(connected and selected)
+- self.active_frame_edit_button.set_sensitive(connected and selected)
++ self.new_share_wizard_button.set_sensitive(connected
++ and share_page_active)
+
++ self.active_frame_new_button.set_sensitive(connected
++ and share_page_active)
++ self.active_frame_delete_button.set_sensitive(connected
++ and selected)
++ self.active_frame_edit_button.set_sensitive(connected
++ and selected)
+
+ def on_disconnect_item_activate(self, widget):
+ if self.pipe_manager is not None:
+@@ -948,21 +988,19 @@ class ShareWindow(gtk.Window):
+ self.fill_active_pane()
+ self.fill_server_info()
+
+- self.set_status("Disconnected.")
+-
++ self.set_status('Disconnected.')
+
+-
+- def toggle_share_view_visiblity(self,widget,Junk):
++ def toggle_share_view_visiblity(self, widget, Junk):
+ """ Toggels Visiblity of hidden shares if authorised """
++
+ is_visible = self.show_all_share_checkbox.get_active()
+ self.pipe_manager.show_all_shares = is_visible
+ self.pipe_manager.get_shares_list()
+- # set the box accordingly from get_shares list
+- self.show_all_share_checkbox.set_active(self.pipe_manager.show_all_shares)
+- # now refresh the share view
+- self.refresh_shares_view()
+
++ self.show_all_share_checkbox.set_active(
++ self.pipe_manager.show_all_shares)
+
++ self.refresh_shares_view()
+
+ def on_key_press(self, widget, event):
+ if event.keyval == gtk.keysyms.F5:
+@@ -970,77 +1008,72 @@ class ShareWindow(gtk.Window):
+ elif event.keyval == gtk.keysyms.Delete:
+ self.on_delete_item_activate(None)
+ elif event.keyval == gtk.keysyms.Return:
+- myev = gtk.gdk.Event(gtk.gdk._2BUTTON_PRESS) #emulate a double-click
++ myev = gtk.gdk.Event(gtk.gdk._2BUTTON_PRESS)
++ # emulates a double-click
+ if self.active_page_index == 0:
+ self.on_shares_tree_view_button_press(None, myev)
+
+-
+-
+ def on_quit_item_activate(self, widget):
+ self.on_self_delete(None, None)
+
+-
+-
+- def on_new_item_activate(self, widget,wizard_mode=False):
++ def on_new_item_activate(self, widget, wizard_mode=False):
+
+ share = self.run_share_add_edit_dialog(wizard_mode=wizard_mode)
+- #TODO cleanup Debug
+- #print share.name,share.comment,share.password,str(share.type),str(share.max_users),share.path
++
+ if share is None:
+- self.set_status("Share creation canceled.")
++ self.set_status('Share creation canceled.')
+ return
+
+ try:
+ self.pipe_manager.add_share(share)
+- self.set_status("Successfully added share \'%s\'." %
+- (share.name))
++ self.set_status("Successfully added share \'%s\'."
++ % share.name)
+ except RuntimeError, re:
+- msg = "Failed to add share: %s." % (re.args[1])
++ msg = 'Failed to add share: %s.' % re.args[1]
+ self.set_status(msg)
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++ self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++ msg)
+ except Exception, ex:
+- msg = "Failed to ad share: %s." % (str(ex))
++ msg = 'Failed to ad share: %s.' % str(ex)
+ self.set_status(msg)
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++ self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++ msg)
+
+ self.refresh_shares_view()
+
+-
+-
+-
+-
+ def on_edit_item_activate(self, widget):
+ share = self.get_selected_share()
+- share = self.run_share_add_edit_dialog(share, self.update_share_callback)
++ share = self.run_share_add_edit_dialog(share,
++ self.update_share_callback)
+ if share is None:
+- self.set_status("Last Share Edit Cancelled.")
++ self.set_status('Last Share Edit Cancelled.')
+ return
+
+ try:
+ self.pipe_manager.modify_share(share)
+- self.set_status("Successfully modified share \'%s\'." %
+- (share.name))
++ self.set_status("Successfully modified share \'%s\'."
++ % share.name)
+ except RuntimeError, re:
+- msg = "Failed to add share: %s." % (re.args[1])
++ msg = 'Failed to add share: %s.' % re.args[1]
+ self.set_status(msg)
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++ self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++ msg)
+ except Exception, ex:
+- msg = "Failed to ad share: %s." % (str(ex))
++ msg = 'Failed to ad share: %s.' % str(ex)
+ self.set_status(msg)
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++ self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++ msg)
+
+ self.refresh_shares_view()
+
+-
+-
+ def on_delete_item_activate(self, widget):
+ share = self.get_selected_share()
+
+@@ -1049,78 +1082,87 @@ class ShareWindow(gtk.Window):
+
+ try:
+ self.pipe_manager.delete_share(share.name)
+- self.set_status("Successfully deleted share \'%s\'." % (share.name))
+-
++ self.set_status("Successfully deleted share \'%s\'."
++ % share.name)
+ except RuntimeError, re:
+- msg = "Failed to delete share: %s." % (re.args[1])
++
++ msg = 'Failed to delete share: %s.'\
++ % re.args[1]
+ self.set_status(msg)
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++ self.run_message_dialog(gtk.MESSAGE_ERROR,
++ gtk.BUTTONS_OK, msg)
+ except Exception, ex:
+- msg = "Failed to delete share: %s." % (str(ex))
++ msg = 'Failed to delete share: %s.' % str(ex)
+ self.set_status(msg)
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++ self.run_message_dialog(gtk.MESSAGE_ERROR,
++ gtk.BUTTONS_OK, msg)
+
+ self.refresh_shares_view()
+
+-
+-
+- def on_notebook_switch_page(self, widget, page, page_num):
++ def on_notebook_switch_page(
++ self,
++ widget,
++ page,
++ page_num,
++ ):
+ self.active_page_index = page_num
+ self.update_sensitivity()
+
+ def update_share_callback(self, share):
+ try:
+ self.pipe_manager.modify_share(share)
+- self.set_status("Share \'%s\' Modified." % (share.name))
++ self.set_status("Share \'%s\' Modified." % share.name)
+ except RuntimeError, re:
+- msg = "Failed to Modify Share: %s." % (re.args[1])
++ msg = 'Failed to Modify Share: %s.' % re.args[1]
+ print msg
+ self.set_status(msg)
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
+-
++ self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++ msg)
+ except Exception, ex:
+- msg = "Failed to Modify Share: %s." % (str(ex))
++
++ msg = 'Failed to Modify Share: %s.' % str(ex)
+ print msg
+ self.set_status(msg)
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++ self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++ msg)
+ finally:
+ self.refresh_shares_view()
+
+-
+ def on_refresh_item_activate(self, widget):
+ try:
+ self.pipe_manager.get_shares_list()
+ except RuntimeError, re:
+- msg = "Failed to Refresh SRV Info: %s." % (re.args[1])
++ msg = 'Failed to Refresh SRV Info: %s.'\
++ % re.args[1]
+ self.set_status(msg)
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++ self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++ msg)
+ except Exception, ex:
+- msg = "Failed to Refresh SRV Info: %s." % (str(ex))
++ msg = 'Failed to Refresh SRV Info: %s.' % str(ex)
+ self.set_status(msg)
+ print msg
+ traceback.print_exc()
+- self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++ self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++ msg)
+
+ self.refresh_shares_view()
+- self.set_status("Successfully Refreshed Shares List.")
++ self.set_status('Successfully Refreshed Shares List.')
+
+- #deselect any selected shares
+- (model, iter) = self.shares_tree_view.get_selection().get_selected()
++ (model, iter) = \
++ self.shares_tree_view.get_selection().get_selected()
+ if iter is None:
+ return
+ selector = self.shares_tree_view.get_selection()
+ selector.unselect_iter(iter)
+
+-
+-
+ def on_shares_tree_view_button_press(self, widget, event):
+ if self.get_selected_share() is None:
+ return
+@@ -1128,36 +1170,33 @@ class ShareWindow(gtk.Window):
+ if event.type == gtk.gdk._2BUTTON_PRESS:
+ self.on_edit_item_activate(self.edit_item)
+
+-
+-
+ def on_self_delete(self, widget, event):
+- if (self.pipe_manager is not None):
++ if self.pipe_manager is not None:
+ self.on_disconnect_item_activate(self.disconnect_item)
+
+ gtk.main_quit()
+ return False
+
+-
+-
+ def refresh_shares_view(self):
+ if not self.connected():
+ return None
+
+- (model, paths) = self.shares_tree_view.get_selection().get_selected_rows()
++ (model, paths) = \
++ self.shares_tree_view.get_selection().get_selected_rows()
+ self.pipe_manager.get_shares_list()
+
+ self.shares_store.clear()
+- for share in self.pipe_manager.share_list :
+- type_comment = self.pipe_manager.get_share_type_info(share.type,'desc')
++ for share in self.pipe_manager.share_list:
++ type_comment = \
++ self.pipe_manager.get_share_type_info(share.type, 'desc'
++ )
+ view_compat_data = [share.name, type_comment,
+- share.comment, share.path]
++ share.comment, share.path]
+ self.shares_store.append(view_compat_data)
+
+- if (len(paths) > 0):
++ if len(paths) > 0:
+ self.shares_tree_view.get_selection().select_path(paths[0])
+
+-
+-
+ def fill_active_pane(self):
+ """ Fills sthe active left pane """
+
+@@ -1166,193 +1205,223 @@ class ShareWindow(gtk.Window):
+ except:
+ share = None
+
+- widget_to_delete = self.shareinfo_frame.get_children()[0]
++ widget_to_delete = \
++ self.shareinfo_frame.get_children()[0]
+ self.shareinfo_frame.remove(widget_to_delete)
+
+ if share is None:
+- table = gtk.Table(1,2)
++ table = gtk.Table(1, 2)
+ table.set_border_width(5)
+- self.active_pane_frame_label.set_markup('<b> No Share Selected </b>')
+-
++ self.active_pane_frame_label.set_markup(
++ '<b> No Share Selected </b>')
+
+- label = gtk.Label("Please Select a Share First")
++ label = gtk.Label('Please Select a Share First')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+- label = gtk.Label(" "*55 )
++ label = gtk.Label(' ' * 55)
+ label.set_alignment(1, 0.5)
+- table.attach(label, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 1, 2, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ else:
++
+ stype = share.type
+- flag_set = self.pipe_manager.get_share_type_info(stype,'flags')
++ flag_set = self.pipe_manager.get_share_type_info(stype,
++ 'flags')
+
+- rows_required = (8 -int(share.password is "") -int(share.max_users == 0xFFFFFFFF)
+- -int(not flag_set[1]) + ((len(share.path)/35)+1)
+- +((len(share.comment)/35)+1))
++ rows_required = ((8 - int(share.password is ''))
++ - int(share.max_users == 0xFFFFFFFF))\
++ - int(not flag_set[1]) + len(share.path) / 35\
++ + 1 + len(share.comment) / 35 + 1
+
+- table = gtk.Table(rows_required,2)
++ table = gtk.Table(rows_required, 2)
+ table.set_border_width(5)
+ table.set_row_spacings(2)
+ table.set_col_spacings(6)
+
+ row_index = 0
+
+- self.active_pane_frame_label.set_markup('<b>Selected Share Details</b>')
+-
++ self.active_pane_frame_label.set_markup(
++ '<b>Selected Share Details</b>')
+
+ label = gtk.Label(' Share Name : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
+
+ label = gtk.Label(share.name)
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
++ table.attach(label, 1, 2, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
+
+ label = gtk.Label(' Comment : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+- if len(share.comment)>35:
+- for i in range((len(share.comment)/35)+1) :
+- label = gtk.Label(share.comment[i*35:i*35+35])
++ if len(share.comment) > 35:
++ for i in range(len(share.comment) / 35 + 1):
++ label = gtk.Label(share.comment[i * 35:i * 35 + 35])
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
+- else :
+- padding = (35 - len(share.comment))*" "
+- label = gtk.Label("".join([share.comment,padding]))
++ table.attach(label, 1, 2, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
++ else:
++ padding = (35 - len(share.comment)) * ' '
++ label = gtk.Label(''.join([share.comment, padding]))
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
++ table.attach(label, 1, 2, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
+
+ label = gtk.Label(' Path : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+- if len(share.path)>35:
+- for i in range((len(share.path)/35)+1) :
+- label = gtk.Label(share.path[i*35:i*35+35])
++ if len(share.path) > 35:
++ for i in range(len(share.path) / 35 + 1):
++ label = gtk.Label(share.path[i * 35:i * 35 + 35])
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
+- else :
+- if share.path == "":
+- padding = 41*" "
++ table.attach(label, 1, 2, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
++ else:
++ if share.path == '':
++ padding = 41 * ' '
+ else:
+- padding = (35 - len(share.path))*" "
+- label = gtk.Label("".join([share.path,padding]))
++ padding = (35 - len(share.path)) * ' '
++ label = gtk.Label(''.join([share.path, padding]))
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
++ table.attach(label, 1, 2, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
+
+-
+-
+- if share.password :
++ if share.password:
+ label = gtk.Label(' Password : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, row_index, row_index+1, gtk.SHRINK,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, row_index, row_index + 1,
++ gtk.SHRINK, gtk.FILL | gtk.EXPAND, 0, 0)
+
+- label = gtk.Label("Protection Enabled")
++ label = gtk.Label('Protection Enabled')
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
++ table.attach(label, 1, 2, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
+
+ label = gtk.Label('<b> Share Type</b>')
+ label.set_use_markup(True)
+ label.set_alignment(0, 0.5)
+- table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
++ table.attach(label, 0, 1, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
+
+ label = gtk.Label(' Type Description : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
+- label_data = self.pipe_manager.get_share_type_info(stype,'desc')
++ table.attach(label, 0, 1, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ label_data = self.pipe_manager.get_share_type_info(
++ stype, 'desc')
+
+ label = gtk.Label(label_data)
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
++ table.attach(label, 1, 2, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
+
+ label = gtk.Label()
+ label.set_markup('<b> Special Flags </b>')
+ label.set_alignment(0, 0.5)
+- table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
++ table.attach(label, 0, 1, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
+
+ flags_present = False
+ if flag_set[0]:
+ flags_present = True
+ label = gtk.Label(' Temporary : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(str(flag_set[0]))
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
++ table.attach(label, 1, 2, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
+
+ if flag_set[1]:
+ flags_present = True
+ label = gtk.Label(' Hidden : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(str(flag_set[1]))
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
++ table.attach(label, 1, 2, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
+
+- if not (flags_present) :
+- label = gtk.Label("No Special Flags")
++ if not flags_present:
++ label = gtk.Label('No Special Flags')
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
++ table.attach(label, 1, 2, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
+
+- if not (share.max_users == 0xFFFFFFFF):
++ if not share.max_users == 0xFFFFFFFF:
+ label = gtk.Label(' Max Users : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(share.max_users)
+ label.set_alignment(0, 0.5)
+- table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+- row_index+=1
++ table.attach(label, 1, 2, row_index, row_index + 1,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++ row_index += 1
+
+ self.shareinfo_frame.add(table)
+ self.shareinfo_frame.show_all()
+
+-
+-
+ def create(self):
+- # main window
+- self.set_title("Samba-Gtk Share Management Interface")
++
++ # main window
++ self.set_title('Samba-Gtk Share Management Interface')
+ self.set_default_size(800, 600)
+- self.icon_filename = os.path.join(sys.path[0], "images", "network.png")
+- self.share_icon_filename = os.path.join(sys.path[0], "images", "network.png")
+- self.icon_pixbuf = gtk.gdk.pixbuf_new_from_file(self.icon_filename)
++ self.icon_filename = os.path.join(sys.path[0], 'images'
++ , 'network.png')
++ self.share_icon_filename = os.path.join(sys.path[0],
++ 'images', 'network.png')
++ self.icon_pixbuf = \
++ gtk.gdk.pixbuf_new_from_file(self.icon_filename)
+ self.set_icon(self.icon_pixbuf)
+
+ accel_group = gtk.AccelGroup()
+- vbox = gtk.VBox(False, 0)
+- self.add(vbox)
+-
++ toplevel_vbox = gtk.VBox(False, 0)
++ self.add(toplevel_vbox)
++
+ # menu
+ self.menubar = gtk.MenuBar()
+- vbox.pack_start(self.menubar, False, False, 0)
++ toplevel_vbox.pack_start(self.menubar, False, False, 0)
+
+- self.file_item = gtk.MenuItem("_File")
++ self.file_item = gtk.MenuItem('_File')
+ self.menubar.add(self.file_item)
+
+ file_menu = gtk.Menu()
+ self.file_item.set_submenu(file_menu)
+
+- self.connect_item = gtk.ImageMenuItem(gtk.STOCK_CONNECT, accel_group)
++ self.connect_item = gtk.ImageMenuItem(gtk.STOCK_CONNECT,
++ accel_group)
+ file_menu.add(self.connect_item)
+
+- self.disconnect_item = gtk.ImageMenuItem(gtk.STOCK_DISCONNECT, accel_group)
++ self.disconnect_item = gtk.ImageMenuItem(gtk.STOCK_DISCONNECT,
++ accel_group)
+ self.disconnect_item.set_sensitive(False)
+ file_menu.add(self.disconnect_item)
+
+@@ -1363,17 +1432,18 @@ class ShareWindow(gtk.Window):
+ self.quit_item = gtk.ImageMenuItem(gtk.STOCK_QUIT, accel_group)
+ file_menu.add(self.quit_item)
+
+- self.view_item = gtk.MenuItem("_View")
++ self.view_item = gtk.MenuItem('_View')
+ self.menubar.add(self.view_item)
+
+ view_menu = gtk.Menu()
+ self.view_item.set_submenu(view_menu)
+
+- self.refresh_item = gtk.ImageMenuItem(gtk.STOCK_REFRESH, accel_group)
++ self.refresh_item = gtk.ImageMenuItem(gtk.STOCK_REFRESH,
++ accel_group)
+ self.refresh_item.set_sensitive(False)
+ view_menu.add(self.refresh_item)
+
+- self.share_item = gtk.MenuItem("_Share")
++ self.share_item = gtk.MenuItem('_Share')
+ self.menubar.add(self.share_item)
+
+ share_menu = gtk.Menu()
+@@ -1383,7 +1453,8 @@ class ShareWindow(gtk.Window):
+ self.new_item.set_sensitive(False)
+ share_menu.add(self.new_item)
+
+- self.delete_item = gtk.ImageMenuItem(gtk.STOCK_DELETE, accel_group)
++ self.delete_item = gtk.ImageMenuItem(gtk.STOCK_DELETE,
++ accel_group)
+ self.delete_item.set_sensitive(False)
+ share_menu.add(self.delete_item)
+
+@@ -1391,36 +1462,39 @@ class ShareWindow(gtk.Window):
+ self.edit_item.set_sensitive(False)
+ share_menu.add(self.edit_item)
+
+- self.wizard_item = gtk.MenuItem("_Wizard")
++ self.wizard_item = gtk.MenuItem('_Wizard')
+ self.menubar.add(self.wizard_item)
+
+ wizard_menu = gtk.Menu()
+ self.wizard_item.set_submenu(wizard_menu)
+
+- self.new_share_wizard_item = gtk.MenuItem(label="New Share Wizard")
++ self.new_share_wizard_item = \
++ gtk.MenuItem(label='New Share Wizard')
+ wizard_menu.add(self.new_share_wizard_item)
+
+- self.help_item = gtk.MenuItem("_Help")
++ self.help_item = gtk.MenuItem('_Help')
+ self.menubar.add(self.help_item)
+
+ help_menu = gtk.Menu()
+ self.help_item.set_submenu(help_menu)
+
+- self.about_item = gtk.ImageMenuItem(gtk.STOCK_ABOUT, accel_group)
++ self.about_item = gtk.ImageMenuItem(gtk.STOCK_ABOUT,
++ accel_group)
+ help_menu.add(self.about_item)
+
+- # toolbar
++ # Toolbar
+ self.toolbar = gtk.Toolbar()
+- vbox.pack_start(self.toolbar, False, False, 0)
++ toplevel_vbox.pack_start(self.toolbar, False, False, 0)
+
+ self.connect_button = gtk.ToolButton(gtk.STOCK_CONNECT)
+ self.connect_button.set_is_important(True)
+- self.connect_button.set_tooltip_text("Connect to a server")
++ self.connect_button.set_tooltip_text('Connect to a server')
+ self.toolbar.insert(self.connect_button, 0)
+
+ self.disconnect_button = gtk.ToolButton(gtk.STOCK_DISCONNECT)
+ self.disconnect_button.set_is_important(True)
+- self.disconnect_button.set_tooltip_text("Disconnect from the server")
++ self.disconnect_button.set_tooltip_text(
++ 'Disconnect from the server')
+ self.toolbar.insert(self.disconnect_button, 1)
+
+ sep = gtk.SeparatorToolItem()
+@@ -1443,330 +1517,393 @@ class ShareWindow(gtk.Window):
+
+ image = gtk.Image()
+ image.set_from_stock(gtk.STOCK_EXECUTE, 48)
+- self.new_share_wizard_button = gtk.ToolButton(image,"New Share Wizard")
++ self.new_share_wizard_button = gtk.ToolButton(image,
++ 'New Share Wizard')
+ self.new_share_wizard_button.set_is_important(True)
+ self.toolbar.insert(self.new_share_wizard_button, 7)
+
+- self.new_button.set_tooltip_text("Add a new Share")
+- self.edit_button.set_tooltip_text("Edit a Share")
+- self.delete_button.set_tooltip_text("Delete a Share")
++ self.new_button.set_tooltip_text('Add a new Share')
++ self.edit_button.set_tooltip_text('Edit a Share')
++ self.delete_button.set_tooltip_text('Delete a Share')
+
+- #share-page
++ # Share-page
+ self.share_notebook = gtk.Notebook()
+- vbox.pack_start(self.share_notebook, True, True, 0)
++ toplevel_vbox.pack_start(self.share_notebook, True, True, 0)
+
+ main_hbox = gtk.HBox()
+- self.share_notebook.append_page(main_hbox, gtk.Label("Share Management"))
+-
+- # share listing on left side
+-
++ self.share_notebook.append_page(main_hbox,
++ gtk.Label('Share Management'))
++
++ # Share listing on left side
+ rvbox = gtk.VBox()
+- main_hbox.pack_start(rvbox,True,True,0)
++ main_hbox.pack_start(rvbox, True, True, 0)
+
+ scrolledwindow = gtk.ScrolledWindow(None, None)
+- scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
++ scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC,
++ gtk.POLICY_AUTOMATIC)
+ scrolledwindow.set_shadow_type(gtk.SHADOW_IN)
+- rvbox.pack_start(scrolledwindow,True,True,2)
+-
++ rvbox.pack_start(scrolledwindow, True, True, 2)
+
+ self.shares_tree_view = gtk.TreeView()
+ scrolledwindow.add(self.shares_tree_view)
+
+ column = gtk.TreeViewColumn()
+- column.set_title("")
++ column.set_title('')
+ renderer = gtk.CellRendererPixbuf()
+- renderer.set_property("pixbuf", gtk.gdk.pixbuf_new_from_file_at_size(self.share_icon_filename, 22, 22))
++ renderer.set_property('pixbuf',
++ gtk.gdk.pixbuf_new_from_file_at_size(
++ self.share_icon_filename,22, 22))
+ column.pack_start(renderer, True)
+ self.shares_tree_view.append_column(column)
+
+ column = gtk.TreeViewColumn()
+- column.set_title("Name")
++ column.set_title('Name')
+ column.set_resizable(True)
+ column.set_sort_column_id(0)
+ renderer = gtk.CellRendererText()
+ column.pack_start(renderer, True)
+ self.shares_tree_view.append_column(column)
+- column.add_attribute(renderer, "text", 0)
++ column.add_attribute(renderer, 'text', 0)
+
+ column = gtk.TreeViewColumn()
+- column.set_title("Share Type")
++ column.set_title('Share Type')
+ column.set_resizable(True)
+ column.set_expand(True)
+ column.set_sort_column_id(1)
+ renderer = gtk.CellRendererText()
+ column.pack_start(renderer, True)
+ self.shares_tree_view.append_column(column)
+- column.add_attribute(renderer, "text", 1)
++ column.add_attribute(renderer, 'text', 1)
+
+ column = gtk.TreeViewColumn()
+- column.set_title("Comment")
++ column.set_title('Comment')
+ column.set_resizable(True)
+ column.set_expand(True)
+ column.set_sort_column_id(2)
+ renderer = gtk.CellRendererText()
+ column.pack_start(renderer, True)
+ self.shares_tree_view.append_column(column)
+- column.add_attribute(renderer, "text", 2)
++ column.add_attribute(renderer, 'text', 2)
+
+ column = gtk.TreeViewColumn()
+- column.set_title("Path")
++ column.set_title('Path')
+ column.set_resizable(True)
+ column.set_sort_column_id(3)
+ renderer = gtk.CellRendererText()
+ column.pack_start(renderer, True)
+ self.shares_tree_view.append_column(column)
+- column.add_attribute(renderer, "text", 3)
++ column.add_attribute(renderer, 'text', 3)
+
+- self.shares_store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
+- self.shares_store.set_sort_column_id(0, gtk.SORT_ASCENDING)
++ self.shares_store = gtk.ListStore(gobject.TYPE_STRING,
++ gobject.TYPE_STRING, gobject.TYPE_STRING,
++ gobject.TYPE_STRING)
++ self.shares_store.set_sort_column_id(0,
++ gtk.SORT_ASCENDING)
+ self.shares_tree_view.set_model(self.shares_store)
+
+ hbox = gtk.HBox()
+- rvbox.pack_start(hbox,False,False,0)
+-
+-
+- self.show_all_share_checkbox = gtk.CheckButton("Show Hidden Shares")
+- hbox.pack_end(self.show_all_share_checkbox,False,False,0)
+- self.show_all_share_checkbox.set_tooltip_text('Enable or disable the visiblity of hidden shares')
++ rvbox.pack_start(hbox, False, False, 0)
++
++ self.show_all_share_checkbox = \
++ gtk.CheckButton('Show Hidden Shares')
++ hbox.pack_end(self.show_all_share_checkbox, False, False,
++ 0)
++ self.show_all_share_checkbox.set_tooltip_text(
++ 'Enable or disable the visiblity of hidden shares')
+ self.show_all_share_checkbox.set_active(False)
+- self.show_all_share_checkbox.connect("toggled",self.toggle_share_view_visiblity,None)
+-
+-
++ self.show_all_share_checkbox.connect('toggled',
++ self.toggle_share_view_visiblity, None)
+
+- ### right active widget :
++ ### Right active widget :
++
+ vbox = gtk.VBox()
+- main_hbox.pack_start(vbox,False,False,0)
+-
+-
++ main_hbox.pack_start(vbox, False, False, 0)
+
+ self.shareinfo_frame = gtk.Frame()
+ self.active_pane_frame_label = gtk.Label()
+ self.active_pane_frame_label.set_use_markup(True)
+- self.active_pane_frame_label.set_markup('<b> No Share Selected </b>')
+- self.shareinfo_frame.set_label_widget(self.active_pane_frame_label)
++ self.active_pane_frame_label.set_markup(
++ '<b> No Share Selected </b>')
++ self.shareinfo_frame.set_label_widget(
++ self.active_pane_frame_label)
+ vbox.pack_start(self.shareinfo_frame, False, True, 0)
+ self.shareinfo_frame.set_border_width(5)
+
+- table = gtk.Table(1,2)
++ table = gtk.Table(1, 2)
+ table.set_border_width(5)
+ table.set_row_spacings(2)
+ table.set_col_spacings(6)
+
+ self.shareinfo_frame.add(table)
+
+- label = gtk.Label("Please Slect a Share First" )
++ label = gtk.Label('Please Slect a Share First')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 0, 1,gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
++
+
+- label = gtk.Label(" "*55 )
++ label = gtk.Label(' ' * 55)
+ label.set_alignment(1, 0.5)
+- table.attach(label, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 1, 2, 0, 1, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ hbox = gtk.HBox()
+- vbox.pack_end(hbox,False,False,0)
++ vbox.pack_end(hbox, False, False, 0)
+
+- table = gtk.Table(3,6,True)
+- hbox.pack_start(table,False,True,0)
++ table = gtk.Table(3, 6, True)
++ hbox.pack_start(table, False, True, 0)
+
+- self.active_frame_new_button = gtk.Button("New")
++ self.active_frame_new_button = gtk.Button('New')
+ self.active_frame_new_button.set_tooltip_text('Add a New Share')
+- table.attach(self.active_frame_new_button, 2, 3, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.active_frame_new_button, 2, 3, 1, 2,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+- self.active_frame_edit_button = gtk.Button("Edit")
+- self.active_frame_edit_button.set_tooltip_text('Edit Current Share')
+- table.attach(self.active_frame_edit_button, 3, 4, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
+- self.active_frame_delete_button = gtk.Button("Delete")
+- self.active_frame_delete_button.set_tooltip_text('Delete Current Share')
+- table.attach(self.active_frame_delete_button, 4, 5, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ self.active_frame_edit_button = gtk.Button('Edit')
++ self.active_frame_edit_button.set_tooltip_text(
++ 'Edit Current Share')
++ table.attach(self.active_frame_edit_button, 3, 4, 1, 2,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
++ self.active_frame_delete_button = gtk.Button('Delete')
++ self.active_frame_delete_button.set_tooltip_text(
++ 'Delete Current Share')
++ table.attach(self.active_frame_delete_button, 4, 5, 1, 2,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+ # Server Info Page
+ hbox = gtk.HBox(True)
+- self.share_notebook.append_page(hbox, gtk.Label("Share Server Info"))
++ self.share_notebook.append_page(hbox,
++ gtk.Label('Share Server Info'))
+
+ vbox = gtk.VBox()
+ hbox.pack_start(vbox, True, True, 0)
+- self.srvinfo_frame = gtk.Frame()
++ self.srvinfo_frame = gtk.Frame()
+ self.srv_info_label = gtk.Label('<b>Share Server Details</b>')
+ self.srv_info_label.set_use_markup(True)
+ self.srvinfo_frame.set_label_widget(self.srv_info_label)
+ vbox.pack_start(self.srvinfo_frame, False, True, 0)
+ self.srvinfo_frame.set_border_width(5)
+
+- table = gtk.Table(10,2)
++ table = gtk.Table(10, 2)
+ table.set_border_width(5)
+ table.set_row_spacings(3)
+ table.set_col_spacings(6)
+ self.srvinfo_frame.add(table)
+
+-
+ label = gtk.Label(' Target Platform OS : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 1, 2, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.srvinfo_tos_label = gtk.Label()
+ self.srvinfo_tos_label.set_alignment(0, 0.5)
+- table.attach(self.srvinfo_tos_label, 1, 2, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.srvinfo_tos_label, 1, 2, 1, 2,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(' NetBIOS Name : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 2, 3, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.srvinfo_name_label = gtk.Label()
+ self.srvinfo_name_label.set_alignment(0, 0.5)
+- table.attach(self.srvinfo_name_label, 1, 2, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.srvinfo_name_label, 1, 2, 2, 3,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(' Hidden : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 3, 4, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 3, 4, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.srvinfo_hidden_label = gtk.Label()
+ self.srvinfo_hidden_label.set_alignment(0, 0.5)
+- table.attach(self.srvinfo_hidden_label, 1, 2, 3, 4, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.srvinfo_hidden_label, 1, 2, 3, 4,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(' Comment : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 4, 5, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 4, 5, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.srvinfo_comment_label = gtk.Label()
+ self.srvinfo_comment_label.set_alignment(0, 0.5)
+- table.attach(self.srvinfo_comment_label, 1, 2, 4, 5, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.srvinfo_comment_label, 1, 2, 4 ,5,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(' Version : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 5, 6, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 5, 6, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.srvinfo_version_label = gtk.Label()
+ self.srvinfo_version_label.set_alignment(0, 0.5)
+- table.attach(self.srvinfo_version_label, 1, 2, 5, 6, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.srvinfo_version_label, 1, 2, 5, 6,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+
+ label = gtk.Label(' Server Type : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 6, 7, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 6, 7, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.srvinfo_type_label = gtk.Label()
+ self.srvinfo_type_label.set_alignment(0, 0.5)
+- table.attach(self.srvinfo_type_label, 1, 2, 6, 7, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.srvinfo_type_label, 1, 2, 6, 7,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
+
+ label = gtk.Label(' User Path : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 7, 8, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 7, 8, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.srvinfo_upath_label = gtk.Label()
+ self.srvinfo_upath_label.set_alignment(0, 0.5)
+- table.attach(self.srvinfo_upath_label, 1, 2, 7, 8, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.srvinfo_upath_label, 1, 2, 7, 8,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
+
+ label = gtk.Label(' Timeout : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 8, 9, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 8, 9, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.srvinfo_to_label = gtk.Label()
+ self.srvinfo_to_label.set_alignment(0, 0.5)
+- table.attach(self.srvinfo_to_label, 1, 2, 8, 9, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.srvinfo_to_label, 1, 2, 8, 9,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
+
+ label = gtk.Label(' Announce / Anndelta : ')
+ label.set_alignment(1, 0.5)
+- table.attach(label, 0, 1, 9, 10, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(label, 0, 1, 9, 10, gtk.FILL,
++ gtk.FILL | gtk.EXPAND, 0, 0)
+
+ self.srvinfo_aa_label = gtk.Label()
+ self.srvinfo_aa_label.set_alignment(0, 0.5)
+- table.attach(self.srvinfo_aa_label, 1, 2, 9, 10, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++ table.attach(self.srvinfo_aa_label, 1, 2, 9, 10,
++ gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
+
+ vbox = gtk.VBox()
+- hbox.pack_start(vbox,True,True,0)
++ hbox.pack_start(vbox, True, True, 0)
+
+- self.sd_frame = gtk.Frame()
++ self.sd_frame = gtk.Frame()
+ self.sd_frame.set_border_width(5)
+ label = gtk.Label('<b> Shared Disks </b>')
+ label.set_use_markup(True)
+ self.sd_frame.set_label_widget(label)
+ vbox.pack_start(self.sd_frame, False, False, 0)
+-
+-
++
+ # status bar
+
+ self.statusbar = gtk.Statusbar()
+ self.statusbar.set_has_resize_grip(True)
+- vbox.pack_start(self.statusbar, False, False, 0)
+-
++ toplevel_vbox.pack_end(self.statusbar, False, False, 0)
++
+ # signals/events
+
+- self.connect("delete_event", self.on_self_delete)
+- self.connect("key-press-event", self.on_key_press)
+-
+- self.connect_item.connect("activate", self.on_connect_item_activate)
+- self.disconnect_item.connect("activate", self.on_disconnect_item_activate)
+- self.quit_item.connect("activate", self.on_quit_item_activate)
+- self.refresh_item.connect("activate", self.on_refresh_item_activate)
+- self.about_item.connect("activate", self.on_about_item_activate)
+-
+-
+- self.new_item.connect("activate", self.on_new_item_activate)
+- self.delete_item.connect("activate", self.on_delete_item_activate)
+- self.edit_item.connect("activate", self.on_edit_item_activate)
+- self.new_share_wizard_item.connect("activate", self.on_new_item_activate,True)
+-
+- self.connect_button.connect("clicked", self.on_connect_item_activate)
+- self.disconnect_button.connect("clicked", self.on_disconnect_item_activate)
+-
+- self.new_button.connect("clicked", self.on_new_item_activate)
+- self.delete_button.connect("clicked", self.on_delete_item_activate)
+- self.edit_button.connect("clicked", self.on_edit_item_activate)
+- self.new_share_wizard_button.connect("clicked", self.on_new_item_activate,True)
+-
+- self.active_frame_new_button.connect("clicked", self.on_new_item_activate)
+- self.active_frame_delete_button.connect("clicked", self.on_delete_item_activate)
+- self.active_frame_edit_button.connect("clicked", self.on_edit_item_activate)
+-
+- self.shares_tree_view.get_selection().connect("changed", self.on_update_sensitivity)
+- self.shares_tree_view.get_selection().connect("changed", self.on_switch_fill_active_pane)
+- self.shares_tree_view.connect("button_press_event", self.on_shares_tree_view_button_press)
+-
+- self.share_notebook.connect("switch-page", self.on_notebook_switch_page)
++ self.connect('delete_event', self.on_self_delete)
++ self.connect('key-press-event', self.on_key_press)
++
++ self.connect_item.connect('activate',
++ self.on_connect_item_activate)
++ self.disconnect_item.connect('activate',
++ self.on_disconnect_item_activate)
++ self.quit_item.connect('activate', self.on_quit_item_activate)
++ self.refresh_item.connect('activate',
++ self.on_refresh_item_activate)
++ self.about_item.connect('activate', self.on_about_item_activate)
++
++ self.new_item.connect('activate', self.on_new_item_activate)
++ self.delete_item.connect('activate',
++ self.on_delete_item_activate)
++ self.edit_item.connect('activate', self.on_edit_item_activate)
++ self.new_share_wizard_item.connect('activate',
++ self.on_new_item_activate, True)
++
++ self.connect_button.connect('clicked',
++ self.on_connect_item_activate)
++ self.disconnect_button.connect('clicked',
++ self.on_disconnect_item_activate)
++
++ self.new_button.connect('clicked', self.on_new_item_activate)
++ self.delete_button.connect('clicked',
++ self.on_delete_item_activate)
++ self.edit_button.connect('clicked', self.on_edit_item_activate)
++ self.new_share_wizard_button.connect('clicked',
++ self.on_new_item_activate, True)
++
++ self.active_frame_new_button.connect('clicked',
++ self.on_new_item_activate)
++ self.active_frame_delete_button.connect('clicked',
++ self.on_delete_item_activate)
++ self.active_frame_edit_button.connect('clicked',
++ self.on_edit_item_activate)
++
++ self.shares_tree_view.get_selection().connect('changed',
++ self.on_update_sensitivity)
++ self.shares_tree_view.get_selection().connect('changed',
++ self.on_switch_fill_active_pane)
++ self.shares_tree_view.connect('button_press_event',
++ self.on_shares_tree_view_button_press)
++
++ self.share_notebook.connect('switch-page',
++ self.on_notebook_switch_page)
+
+ self.add_accel_group(accel_group)
+
+ ############################################################################################################
+
++
+ def PrintUsage():
+- print "Usage: %s [OPTIONS]" % (str(os.path.split(__file__)[-1]))
+- print "All options are optional. The user will be queried for additional information if needed.\n"
+- print " -s --server\t\tspecify the server to connect to."
+- print " -u --user\t\tspecify the username."
+- print " -p --password\tThe password for the user."
+- print " -t --transport\tTransport type.\n\t\t\t\t0 for RPC, SMB, TCP/IP\n\t\t\t\t1 for RPC, TCP/IP\n\t\t\t\t2 for localhost."
+- print " -c --connect-now\tSkip the connect dialog."
++ print 'Usage: %s [OPTIONS]'\
++ % str(os.path.split(__file__)[-1])
++ print 'All options are optional. The user will be queried for additional information if needed.\n'
++ print ' -s --server\t\tspecify the server to connect to.'
++ print ' -u --user\t\tspecify the username.'
++ print ' -p --password\tThe password for the user.'
++ print ''' -t --transport\tTransport type.
++\t\t\t\t0 for RPC, SMB, TCP/IP
++\t\t\t\t1 for RPC, TCP/IP
++\t\t\t\t2 for localhost.'''
++ print ' -c --connect-now\tSkip the connect dialog.'
+
+
+ def ParseArgs(argv):
+ arguments = {}
+
+- try: #get arguments into a nicer format
+- opts, args = getopt.getopt(argv, "chu:s:p:t:", ["help", "user=", "server=", "password=", "connect-now", "transport="])
++ try: # get arguments into a nicer format
++ (opts, args) = getopt.getopt(argv, 'chu:s:p:t:', [
++ 'help',
++ 'user=',
++ 'server=',
++ 'password=',
++ 'connect-now',
++ 'transport=',
++ ])
+ except getopt.GetoptError:
+ PrintUsage()
+ sys.exit(2)
+
+- for opt, arg in opts:
+- if opt in ("-h", "--help"):
++ for (opt, arg) in opts:
++ if opt in ('-h', '--help'):
+ PrintUsage()
+ sys.exit(0)
+- elif opt in ("-s", "--server"):
+- arguments.update({"server":arg})
+- elif opt in ("-u", "--user"):
+- arguments.update({"username":arg})
+- elif opt in ("-p", "--password"):
+- arguments.update({"password":arg})
+- elif opt in ("-t", "--transport"):
+- arguments.update({"transport_type":int(arg)})
+- elif opt in ("-c", "--connect-now"):
+- arguments.update({"connect_now":True})
+- return (arguments)
+-
+-
+-if __name__ == "__main__":
+- arguments = ParseArgs(sys.argv[1:]) #the [1:] ignores the first argument, which is the path to our utility
++ elif opt in ('-s', '--server'):
++ arguments.update({'server': arg})
++ elif opt in ('-u', '--user'):
++ arguments.update({'username': arg})
++ elif opt in ('-p', '--password'):
++ arguments.update({'password': arg})
++ elif opt in ('-t', '--transport'):
++ arguments.update({'transport_type': int(arg)})
++ elif opt in ('-c', '--connect-now'):
++ arguments.update({'connect_now': True})
++ return arguments
++
++
++if __name__ == '__main__':
++ arguments = ParseArgs(sys.argv[1:])
+
+ main_window = ShareWindow(**arguments)
+ main_window.show_all()
+
+commit 7754896966e49572ce08faa97e31b66be15265f6
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Sun Aug 14 20:32:53 2011 +0000
+
+ updates
+
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index cc552a7..b433d6d 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -71,7 +71,7 @@ class srvsvcConnectDialog(gtk.Dialog):
+
+ self.vbox.set_spacing(5)
+
+- # artwork
++ # artwork TODO remove post decession
+
+ self.artwork = gtk.VBox()
+
+@@ -92,6 +92,8 @@ class srvsvcConnectDialog(gtk.Dialog):
+ self.artwork.pack_start(box, True, True, 0)
+
+ self.vbox.pack_start(self.artwork, False, True, 0)
++
++ ########################### end of artwork TODO :
+
+ # server frame
+
+@@ -408,26 +410,10 @@ class ShareAddEditDialog(gtk.Dialog):
+ hbox.pack_start(label, True, True, 0)
+ self.desc_box.pack_start(hbox,True, True, 0)
+
+- # main box
+-
+- self.main_box = gtk.HBox()
+- self.vbox.pack_start(self.main_box,True,True,0)
+-
+- #vertical logo
+- #vbox = gtk.VBox()
+- #vbox.set_border_width(5)
+- #samba_image_filename = os.path.join(sys.path[0],'images',
+- # 'samba-logo-vertical.png')
+- #samba_image = gtk.Image()
+- #samba_image.set_from_file(samba_image_filename)
+- #vbox.pack_end(samba_image, False, True, 0)
+-
+- #self.main_box.pack_start(vbox, False, True, 0)
+-
+ # the main form
+
+ self.form_box = gtk.VBox()
+- self.main_box.pack_start(self.form_box, True, True, 0)
++ self.vbox.pack_start(self.form_box, True, True, 0)
+
+ # Name , password and comment (npc) frame
+ frame = gtk.Frame()
+@@ -677,26 +663,10 @@ class DeleteDialog(gtk.Dialog):
+ hbox.pack_start(label, True, True, 0)
+ self.desc_box.pack_start(hbox,True, True, 0)
+
+- # main box
+-
+- self.main_box = gtk.HBox()
+- self.vbox.pack_start(self.main_box,True,True,0)
+-
+- #vertical logo
+- #vbox = gtk.VBox()
+- #vbox.set_border_width(5)
+- #samba_image_filename = os.path.join(sys.path[0],'images',
+- # 'samba-logo-vertical.png')
+- #samba_image = gtk.Image()
+- #samba_image.set_from_file(samba_image_filename)
+- #vbox.pack_end(samba_image, False, True, 0)
+-
+- #self.main_box.pack_start(vbox, False, True, 0)
+-
+ # the main form
+
+ self.form_box = gtk.VBox()
+- self.main_box.pack_start(self.form_box, True, True, 0)
++ self.vbox.pack_start(self.form_box, True, True, 0)
+
+ frame = gtk.Frame()
+ label = gtk.Label('<b> Share Details</b>')
+
+commit fffac28cd2768d87a68572e60236f4e319727303
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Thu Aug 11 00:04:55 2011 +0530
+
+ hide types, code cleanup, remove artwork, sys path appends not default anymore
+
+diff --git a/sambagtk/main.py b/sambagtk/main.py
+index 9f67982..f59901e 100644
+--- a/sambagtk/main.py
++++ b/sambagtk/main.py
+@@ -11,7 +11,9 @@ import gtk.glade
+ import os.path
+ import getopt
+
+-sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++#sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++# for use against the default binaries from default .configure.developer for use on python 2.7
++# Uncomment the above line if it is yor your config , else edit it as required
+
+
+ import pygwsam
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index c1c0551..284c98d 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -31,9 +31,9 @@ import getopt
+ import gobject
+ import gtk
+
+-sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++#sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
+ #for use against the default binaries from default .configure.developer for use on python 2.7
+-#TODO remove these entries
++# Unhash the above line if it is yor your config , else edit it as required
+
+ from samba import credentials
+ from samba.dcerpc import (
+@@ -1772,5 +1772,3 @@ if __name__ == "__main__":
+ main_window.show_all()
+ gtk.main()
+
+-#debug test pipe : TODO (remove later)
+-# test = srvsvcPipeManager('127.0.0.1',0,'Administrator','Pass#2011')
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index e3baa82..cc552a7 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -414,15 +414,15 @@ class ShareAddEditDialog(gtk.Dialog):
+ self.vbox.pack_start(self.main_box,True,True,0)
+
+ #vertical logo
+- vbox = gtk.VBox()
+- vbox.set_border_width(5)
+- samba_image_filename = os.path.join(sys.path[0],'images',
+- 'samba-logo-vertical.png')
+- samba_image = gtk.Image()
+- samba_image.set_from_file(samba_image_filename)
+- vbox.pack_end(samba_image, False, True, 0)
++ #vbox = gtk.VBox()
++ #vbox.set_border_width(5)
++ #samba_image_filename = os.path.join(sys.path[0],'images',
++ # 'samba-logo-vertical.png')
++ #samba_image = gtk.Image()
++ #samba_image.set_from_file(samba_image_filename)
++ #vbox.pack_end(samba_image, False, True, 0)
+
+- self.main_box.pack_start(vbox, False, True, 0)
++ #self.main_box.pack_start(vbox, False, True, 0)
+
+ # the main form
+
+@@ -515,12 +515,14 @@ class ShareAddEditDialog(gtk.Dialog):
+ self.stype_printq_radio_button = gtk.RadioButton(self.stype_disktree_radio_button,'Print Queue')
+ self.stype_printq_radio_button.set_tooltip_text('Shared Print Queue')
+ self.stype_printq_radio_button.set_active(self.stype == srvsvc.STYPE_PRINTQ)
+- vbox.pack_start(self.stype_printq_radio_button)
++ #vbox.pack_start(self.stype_printq_radio_button)
++ #deactivating this option until samba4 is fixed TODO activate once base is fixed
+
+ self.stype_ipc_radio_button = gtk.RadioButton(self.stype_printq_radio_button,'IPC ')
+ self.stype_ipc_radio_button.set_tooltip_text('Shared Interprocess Communication Pipe (IPC).')
+ self.stype_ipc_radio_button.set_active(self.stype == srvsvc.STYPE_IPC)
+- vbox.pack_start(self.stype_ipc_radio_button)
++ #vbox.pack_start(self.stype_ipc_radio_button)
++ #deactivating this option until samba4 is fixed TODO activate once base is fixed
+
+ # Special Share Flags
+ vbox = gtk.VBox()
+@@ -681,15 +683,15 @@ class DeleteDialog(gtk.Dialog):
+ self.vbox.pack_start(self.main_box,True,True,0)
+
+ #vertical logo
+- vbox = gtk.VBox()
+- vbox.set_border_width(5)
+- samba_image_filename = os.path.join(sys.path[0],'images',
+- 'samba-logo-vertical.png')
+- samba_image = gtk.Image()
+- samba_image.set_from_file(samba_image_filename)
+- vbox.pack_end(samba_image, False, True, 0)
+-
+- self.main_box.pack_start(vbox, False, True, 0)
++ #vbox = gtk.VBox()
++ #vbox.set_border_width(5)
++ #samba_image_filename = os.path.join(sys.path[0],'images',
++ # 'samba-logo-vertical.png')
++ #samba_image = gtk.Image()
++ #samba_image.set_from_file(samba_image_filename)
++ #vbox.pack_end(samba_image, False, True, 0)
++
++ #self.main_box.pack_start(vbox, False, True, 0)
+
+ # the main form
+
+
+commit f0fee8f57697c04d5b673a1f03508ffbf4e5bdee
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Mon Aug 8 16:55:54 2011 +0530
+
+ page swaps fixed
+
+diff --git a/sambagtk/main.py b/sambagtk/main.py
+index df75b33..9f67982 100644
+--- a/sambagtk/main.py
++++ b/sambagtk/main.py
+@@ -39,6 +39,7 @@ class SambaUtilities(object):
+ self.svcctl_window = None
+ self.crontab_window = None
+ self.srvsvc_window = None
++ self.srvsvc_init= False
+
+ self.connection_args = connection_args
+ self.additional_connection_args = {} #arguments not supported by all utilities, such as domain_index
+@@ -128,7 +129,7 @@ class SambaUtilities(object):
+
+ self.set_status("User tab initialized.")
+ self.update_sensitivity()
+-
++
+ def init_srvsvc_page(self):
+
+ args = self.connection_args.copy()
+@@ -140,8 +141,8 @@ class SambaUtilities(object):
+ self.srvsvc_viewport.show_all() #unhide all widgets
+
+ #We'll be displaying this later. We need to unparent it before attaching it to another container
+- #self.srvsvc_window.menubar.unparent()
+- #self.srvsvc_window.toolbar.unparent()
++
++ self.srvsvc_window.toolbar.unparent()
+ self.srvsvc_window.statusbar = self.statusbar #we simply tell the utility to use our status bar instead
+
+ self.set_status("Share Manager tab initialized.")
+@@ -199,10 +200,10 @@ class SambaUtilities(object):
+
+ def regedit_initialized(self):
+ return self.regedit_window is not None
+-
++
+ def srvsvc_initialized (self):
+ return self.srvsvc_window is not None
+-
++
+ def svcctl_initialized(self):
+ return self.svcctl_window is not None
+
+@@ -379,19 +380,22 @@ class SambaUtilities(object):
+ #Menubar
+ children = self.menubar_viewport.get_children()
+ self.menubar_viewport.remove(children[0])
+- self.srvsvc_window.menubar.reparent(self.menubar_viewport)
+- #self.menubar_viewport.add(self.srvsvc_window.menubar)
++ if self.srvsvc_init is False:
++ self.srvsvc_window.menubar.reparent(self.menubar_viewport)
++ self.srvsvc_init = True
++ else:
++ self.menubar_viewport.add(self.srvsvc_window.menubar)
+ self.menubar_viewport.show_all()
+
+ #Toolbar
+- children = self.toolbar_viewport.get_children()
++ children = self.toolbar_viewport.get_children()
+ self.toolbar_viewport.remove(children[0])
+ self.srvsvc_window.toolbar.unparent()
+ self.toolbar_viewport.add(self.srvsvc_window.toolbar)
+ self.toolbar_viewport.show_all()
+-
++
+ self.srvsvc_window.hide()
+-
++
+ elif page_num == 3: #Regedit page
+ if self.regedit_viewport.child == None:
+ self.init_regedit_page()
+@@ -450,7 +454,7 @@ class SambaUtilities(object):
+ self.sam_window.on_connect_item_activate(None, **self.connection_args)
+ else:
+ self.init_sam_page()
+-
++
+ if self.srvsvc_initialized():
+ if not self.srvsvc_window.connected():
+ self.srvsvc_window.on_connect_item_activate(None, **self.connection_args)
+diff --git a/sambagtk/pygwsam.py b/sambagtk/pygwsam.py
+index d57c083..e11be7d 100755
+--- a/sambagtk/pygwsam.py
++++ b/sambagtk/pygwsam.py
+@@ -131,7 +131,7 @@ class SAMPipeManager(object):
+
+ def update_user(self, user):
+ """Submit any changes to 'user' to the server.
+-
++
+ The User's RID must be correct for this to work.
+ This function will call update_user_security() to update user security
+ options.
+@@ -300,7 +300,7 @@ class SAMPipeManager(object):
+
+ def info_to_user(self, query_info, user=None):
+ """Converts 'query_info' information into a user type.
+-
++
+ Values in 'user' will be overwriten by this function. If called with 'None' then a new User structure will be created
+
+ returns 'user
+
+commit a956ca8135492291830ba7ab0eb6e5bbad8288ff
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Mon Aug 8 16:32:47 2011 +0530
+
+ connect missing image fixup
+
+diff --git a/sambagtk/sam.py b/sambagtk/sam.py
+index 0c7fa3d..9fcfd30 100644
+--- a/sambagtk/sam.py
++++ b/sambagtk/sam.py
+@@ -542,7 +542,7 @@ class SAMConnectDialog(gtk.Dialog):
+
+ self.artwork = gtk.VBox()
+
+- self.samba_image_filename = os.path.join(sys.path[0],"..", 'images',
++ self.samba_image_filename = os.path.join(sys.path[0],'images',
+ 'samba-logo-small.png')
+ self.samba_image = gtk.Image()
+ self.samba_image.set_from_file(self.samba_image_filename)
+
+commit d577b6d1ac9af13ba702b312d041c900adda6b15
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Mon Aug 8 15:50:28 2011 +0530
+
+ Multiple changes
+ 1) Main now auto executes
+ 2) Images relocated to match structure of rest of sambagtk
+ 3) Modified sam.py to show newstyle connect dialog to maintain consistancy
+
+diff --git a/images/network-folder-alternate.png b/images/network-folder-alternate.png
+deleted file mode 100644
+index a49a77d..0000000
+Binary files a/images/network-folder-alternate.png and /dev/null differ
+diff --git a/images/network-folder-blue.png b/images/network-folder-blue.png
+deleted file mode 100644
+index 958039f..0000000
+Binary files a/images/network-folder-blue.png and /dev/null differ
+diff --git a/images/network-folder.png b/images/network-folder.png
+deleted file mode 100644
+index 311aa6f..0000000
+Binary files a/images/network-folder.png and /dev/null differ
+diff --git a/images/network-pipe-alt.png b/images/network-pipe-alt.png
+deleted file mode 100644
+index 8d1469f..0000000
+Binary files a/images/network-pipe-alt.png and /dev/null differ
+diff --git a/images/network-pipe.png b/images/network-pipe.png
+deleted file mode 100644
+index d05c01c..0000000
+Binary files a/images/network-pipe.png and /dev/null differ
+diff --git a/images/network-printer.png b/images/network-printer.png
+deleted file mode 100644
+index 5590e52..0000000
+Binary files a/images/network-printer.png and /dev/null differ
+diff --git a/images/network.png b/images/network.png
+deleted file mode 100644
+index 8d1469f..0000000
+Binary files a/images/network.png and /dev/null differ
+diff --git a/images/samba-logo-old.png b/images/samba-logo-old.png
+deleted file mode 100644
+index 475cc26..0000000
+Binary files a/images/samba-logo-old.png and /dev/null differ
+diff --git a/images/samba-logo-small.png b/images/samba-logo-small.png
+deleted file mode 100644
+index 8c2e20b..0000000
+Binary files a/images/samba-logo-small.png and /dev/null differ
+diff --git a/images/samba-logo-vertical.png b/images/samba-logo-vertical.png
+deleted file mode 100644
+index 05a39b6..0000000
+Binary files a/images/samba-logo-vertical.png and /dev/null differ
+diff --git a/sambagtk/images/network-folder-alternate.png b/sambagtk/images/network-folder-alternate.png
+new file mode 100644
+index 0000000..a49a77d
+Binary files /dev/null and b/sambagtk/images/network-folder-alternate.png differ
+diff --git a/sambagtk/images/network-folder-blue.png b/sambagtk/images/network-folder-blue.png
+new file mode 100644
+index 0000000..958039f
+Binary files /dev/null and b/sambagtk/images/network-folder-blue.png differ
+diff --git a/sambagtk/images/network-folder.png b/sambagtk/images/network-folder.png
+new file mode 100644
+index 0000000..311aa6f
+Binary files /dev/null and b/sambagtk/images/network-folder.png differ
+diff --git a/sambagtk/images/network-pipe-alt.png b/sambagtk/images/network-pipe-alt.png
+new file mode 100644
+index 0000000..8d1469f
+Binary files /dev/null and b/sambagtk/images/network-pipe-alt.png differ
+diff --git a/sambagtk/images/network-pipe.png b/sambagtk/images/network-pipe.png
+new file mode 100644
+index 0000000..d05c01c
+Binary files /dev/null and b/sambagtk/images/network-pipe.png differ
+diff --git a/sambagtk/images/network-printer.png b/sambagtk/images/network-printer.png
+new file mode 100644
+index 0000000..5590e52
+Binary files /dev/null and b/sambagtk/images/network-printer.png differ
+diff --git a/sambagtk/images/network.png b/sambagtk/images/network.png
+new file mode 100644
+index 0000000..8d1469f
+Binary files /dev/null and b/sambagtk/images/network.png differ
+diff --git a/sambagtk/images/samba-logo-old.png b/sambagtk/images/samba-logo-old.png
+new file mode 100644
+index 0000000..475cc26
+Binary files /dev/null and b/sambagtk/images/samba-logo-old.png differ
+diff --git a/sambagtk/images/samba-logo-small.png b/sambagtk/images/samba-logo-small.png
+index 475cc26..8c2e20b 100644
+Binary files a/sambagtk/images/samba-logo-small.png and b/sambagtk/images/samba-logo-small.png differ
+diff --git a/sambagtk/images/samba-logo-vertical.png b/sambagtk/images/samba-logo-vertical.png
+new file mode 100644
+index 0000000..05a39b6
+Binary files /dev/null and b/sambagtk/images/samba-logo-vertical.png differ
+diff --git a/sambagtk/main.py b/sambagtk/main.py
+index d96b684..df75b33 100644
+--- a/sambagtk/main.py
++++ b/sambagtk/main.py
+@@ -550,11 +550,11 @@ def ParseArgs(argv):
+ arguments.update({"connect_now":True})
+ return (arguments)
+
+-"""
++
+ if __name__ == "__main__":
+ arguments = ParseArgs(sys.argv[1:])
+ gtk.gdk.threads_init()
+ main_window = SambaUtilities(arguments)
+ sys.stdout = main_window #redirect print statements to the write() function of this class
+ gtk.main()
+-"""
++
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index 17c780a..c1c0551 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -808,7 +808,7 @@ class ShareWindow(gtk.Window):
+ 0x04000000:('SV_TYPE_CLUSTER_VS_NT','Virtual Server Cluster')
+ }
+
+- label_data = server_typedict.get(self.server_info.server_type,('','Unknown'))[1]
++ label_data = server_typedict.get(self.server_info.server_type,('','Multiple Capablities'))[1]
+ self.srvinfo_type_label.set_text(label_data)
+ self.srvinfo_upath_label.set_text(self.server_info.userpath.upper())
+ self.srvinfo_to_label.set_text(str(self.server_info.disc))
+@@ -1330,8 +1330,8 @@ class ShareWindow(gtk.Window):
+ # main window
+ self.set_title("Samba-Gtk Share Management Interface")
+ self.set_default_size(800, 600)
+- self.icon_filename = os.path.join(sys.path[0],"..", "images", "network.png")
+- self.share_icon_filename = os.path.join(sys.path[0],"..", "images", "network.png")
++ self.icon_filename = os.path.join(sys.path[0], "images", "network.png")
++ self.share_icon_filename = os.path.join(sys.path[0], "images", "network.png")
+ self.icon_pixbuf = gtk.gdk.pixbuf_new_from_file(self.icon_filename)
+ self.set_icon(self.icon_pixbuf)
+
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index d159201..e3baa82 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -75,7 +75,7 @@ class srvsvcConnectDialog(gtk.Dialog):
+
+ self.artwork = gtk.VBox()
+
+- self.samba_image_filename = os.path.join(sys.path[0],"..", 'images',
++ self.samba_image_filename = os.path.join(sys.path[0],'images',
+ 'samba-logo-small.png')
+ self.samba_image = gtk.Image()
+ self.samba_image.set_from_file(self.samba_image_filename)
+@@ -378,7 +378,7 @@ class ShareAddEditDialog(gtk.Dialog):
+ self.icon_name = ["network-folder","network-printer",
+ "network","network-pipe"][self.stype]
+ self.icon_filename = \
+- os.path.join(sys.path[0], "..","images",''.join([self.icon_name,'.png']))
++ os.path.join(sys.path[0],"images",''.join([self.icon_name,'.png']))
+ self.set_icon_from_file(self.icon_filename)
+ self.vbox.set_spacing(3)
+ self.set_border_width(5)
+@@ -416,7 +416,7 @@ class ShareAddEditDialog(gtk.Dialog):
+ #vertical logo
+ vbox = gtk.VBox()
+ vbox.set_border_width(5)
+- samba_image_filename = os.path.join(sys.path[0],"..", 'images',
++ samba_image_filename = os.path.join(sys.path[0],'images',
+ 'samba-logo-vertical.png')
+ samba_image = gtk.Image()
+ samba_image.set_from_file(samba_image_filename)
+@@ -649,7 +649,7 @@ class DeleteDialog(gtk.Dialog):
+ self.icon_name = ["network-folder","network-printer",
+ "network","network-pipe"][self.stype]
+ self.icon_filename = \
+- os.path.join(sys.path[0],"..", "images",''.join([self.icon_name,'.png']))
++ os.path.join(sys.path[0],"images",''.join([self.icon_name,'.png']))
+ self.set_icon_from_file(self.icon_filename)
+ self.vbox.set_spacing(3)
+ self.set_border_width(5)
+@@ -683,7 +683,7 @@ class DeleteDialog(gtk.Dialog):
+ #vertical logo
+ vbox = gtk.VBox()
+ vbox.set_border_width(5)
+- samba_image_filename = os.path.join(sys.path[0], "..",'images',
++ samba_image_filename = os.path.join(sys.path[0],'images',
+ 'samba-logo-vertical.png')
+ samba_image = gtk.Image()
+ samba_image.set_from_file(samba_image_filename)
+@@ -835,7 +835,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+
+ vbox = gtk.VBox()
+ vbox.set_border_width(5)
+- samba_image_filename = os.path.join(sys.path[0],"..", 'images',
++ samba_image_filename = os.path.join(sys.path[0],'images',
+ 'samba-logo-small.png')
+ samba_image = gtk.Image()
+ samba_image.set_from_file(samba_image_filename)
+diff --git a/sambagtk/sam.py b/sambagtk/sam.py
+index 1844997..0c7fa3d 100644
+--- a/sambagtk/sam.py
++++ b/sambagtk/sam.py
+@@ -534,11 +534,32 @@ class SAMConnectDialog(gtk.Dialog):
+ self.set_border_width(5)
+ self.set_icon_name(gtk.STOCK_CONNECT)
+ self.set_resizable(False)
++ self.set_decorated(True)
+
+ # server frame
+
+ self.vbox.set_spacing(5)
+
++ self.artwork = gtk.VBox()
++
++ self.samba_image_filename = os.path.join(sys.path[0],"..", 'images',
++ 'samba-logo-small.png')
++ self.samba_image = gtk.Image()
++ self.samba_image.set_from_file(self.samba_image_filename)
++ self.artwork.pack_start(self.samba_image, True, True, 0)
++
++ label = gtk.Label('Opening Windows to A Wider World')
++ box = gtk.HBox()
++ box.pack_start(label, True, True, 0)
++ self.artwork.pack_start(box, True, True, 0)
++
++ label = gtk.Label('Samba Control Center')
++ box = gtk.HBox()
++ box.pack_start(label, True, True, 0)
++ self.artwork.pack_start(box, True, True, 0)
++
++ self.vbox.pack_start(self.artwork, False, True, 0)
++
+ self.server_frame = gtk.Frame("Server")
+ self.vbox.pack_start(self.server_frame, False, True, 0)
+
+
+commit 31d64c06bb4a9c23e4ccb0f9df0023d2fe0146da
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Sat Aug 6 01:03:36 2011 +0530
+
+ integration complete
+
+diff --git a/sambagtk/dialogs.py b/sambagtk/dialogs.py
+index 3b6836f..ddb669b 100644
+--- a/sambagtk/dialogs.py
++++ b/sambagtk/dialogs.py
+@@ -2,6 +2,7 @@
+ #
+ # Copyright (C) 2010 Sergio Martins <sergio97@gmail.com>
+ # Copyright (C) 2011 Jelmer Vernooij <jelmer@samba.org>
++# Copyright (C) 2011 Dhananjay Sathe <dhananjaysathe@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
+@@ -32,7 +33,7 @@ class AboutDialog(gtk.AboutDialog):
+ self.set_name(name)
+ self.set_version(samba.version)
+ self.set_logo(icon)
+- self.set_copyright("Copyright \xc2\xa9 2010 Sergio Martins <Sergio97@gmail.com>")
++ self.set_copyright("Copyright \xc2\xa9 2010 Sergio Martins <Sergio97@gmail.com> Copyright \xc2\xa9 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>")
+ self.set_authors(["Sergio Martins <Sergio97@gmail.com>", "Calin Crisan <ccrisan@gmail.com>", "Dhananjay Sathe <dhananajaysathe@gmail.com>","Jelmer Vernooij <jelmer@samba.org>"])
+ self.set_comments(description)
+ self.set_wrap_license(True)
+diff --git a/sambagtk/main.glade b/sambagtk/main.glade
+index 8a11a69..9c88ad0 100644
+--- a/sambagtk/main.glade
++++ b/sambagtk/main.glade
+@@ -1,63 +1,85 @@
+-<?xml version="1.0"?>
++<?xml version="1.0" encoding="UTF-8"?>
+ <interface>
+ <requires lib="gtk+" version="2.16"/>
+- <!-- interface-naming-policy project-wide -->
++ <object class="GtkImage" id="image1">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="stock">gtk-missing-image</property>
++ </object>
++ <object class="GtkImage" id="image2">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="stock">gtk-clear</property>
++ </object>
+ <object class="GtkWindow" id="main_window">
++ <property name="can_focus">False</property>
+ <property name="window_position">center</property>
+ <property name="default_width">800</property>
+ <property name="default_height">600</property>
+- <signal name="destroy" handler="on_main_window_destroy"/>
+- <signal name="key_press_event" handler="on_main_window_key_press_event"/>
++ <signal name="destroy" handler="on_main_window_destroy" swapped="no"/>
++ <signal name="key-press-event" handler="on_main_window_key_press_event" swapped="no"/>
+ <child>
+ <object class="GtkVBox" id="vbox">
+ <property name="visible">True</property>
+- <property name="orientation">vertical</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkViewport" id="menubar_viewport">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="resize_mode">queue</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkMenuBar" id="menubar">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuItem" id="menuitem">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="label" translatable="yes">_File</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="menu_file">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImageMenuItem" id="connect_all_item">
+ <property name="label">gtk-connect</property>
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+- <signal name="activate" handler="on_connect_all_item_activate"/>
++ <signal name="activate" handler="on_connect_all_item_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="disconnect_all_item">
+ <property name="label">gtk-disconnect</property>
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+- <signal name="activate" handler="on_disconnect_all_item_activate"/>
++ <signal name="activate" handler="on_disconnect_all_item_activate" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImageMenuItem" id="quit_item">
+ <property name="label">gtk-quit</property>
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+- <signal name="activate" handler="on_quit_item_activate"/>
++ <signal name="activate" handler="on_quit_item_activate" swapped="no"/>
+ </object>
+ </child>
+ </object>
+@@ -67,18 +89,23 @@
+ <child>
+ <object class="GtkMenuItem" id="menuitem2">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="label" translatable="yes">_Edit</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="menu_edit">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImageMenuItem" id="clear_log_item">
+ <property name="label">Clear Log</property>
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="image">image2</property>
+ <property name="use_stock">False</property>
+- <signal name="activate" handler="on_clear_log_activate"/>
++ <signal name="activate" handler="on_clear_log_activate" swapped="no"/>
+ </object>
+ </child>
+ </object>
+@@ -88,18 +115,23 @@
+ <child>
+ <object class="GtkMenuItem" id="menuitem3">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="label" translatable="yes">_View</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="menu_view">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImageMenuItem" id="connection_info_item">
+ <property name="label">Connection Details</property>
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="image">image1</property>
+ <property name="use_stock">False</property>
+- <signal name="activate" handler="on_connection_info_item_activate"/>
++ <signal name="activate" handler="on_connection_info_item_activate" swapped="no"/>
+ </object>
+ </child>
+ </object>
+@@ -109,18 +141,23 @@
+ <child>
+ <object class="GtkMenuItem" id="menuitem4">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="label" translatable="yes">_Help</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="menu_help">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImageMenuItem" id="about_item">
+ <property name="label">gtk-about</property>
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+- <signal name="activate" handler="on_about_item_activate"/>
++ <signal name="activate" handler="on_about_item_activate" swapped="no"/>
+ </object>
+ </child>
+ </object>
+@@ -132,25 +169,30 @@
+ </object>
+ <packing>
+ <property name="expand">False</property>
++ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkViewport" id="toolbar_viewport">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="resize_mode">queue</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkToolbar" id="toolbar">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkToolButton" id="connect_all_button">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Connect All</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-connect</property>
+- <signal name="clicked" handler="on_connect_all_button_clicked"/>
++ <signal name="clicked" handler="on_connect_all_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+@@ -160,11 +202,13 @@
+ <child>
+ <object class="GtkToolButton" id="disconnect_all_button">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Disconnect All</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-disconnect</property>
+- <signal name="clicked" handler="on_disconnect_all_button_clicked"/>
++ <signal name="clicked" handler="on_disconnect_all_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+@@ -174,6 +218,7 @@
+ <child>
+ <object class="GtkSeparatorToolItem" id="toolbutton3">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+@@ -183,11 +228,13 @@
+ <child>
+ <object class="GtkToolButton" id="clear_log_button">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="use_action_appearance">False</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Clear Log</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-clear</property>
+- <signal name="clicked" handler="on_clear_log_button_clicked"/>
++ <signal name="clicked" handler="on_clear_log_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+@@ -199,6 +246,7 @@
+ </object>
+ <packing>
+ <property name="expand">False</property>
++ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+@@ -207,28 +255,30 @@
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tab_pos">left</property>
+- <property name="homogeneous">True</property>
+- <signal name="switch_page" handler="on_utility_notebook_switch_page"/>
++ <signal name="switch-page" handler="on_utility_notebook_switch_page" swapped="no"/>
+ <child>
+ <object class="GtkViewport" id="launcher_viewport">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="resize_mode">queue</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkVBox" id="vbox2">
+ <property name="visible">True</property>
+- <property name="orientation">vertical</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkVBox" id="vbox3">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="border_width">3</property>
+- <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+@@ -243,25 +293,32 @@
+ <child>
+ <object class="GtkLabel" id="server_label">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">Unknown</property>
+ </object>
+ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+@@ -276,25 +333,32 @@
+ <child>
+ <object class="GtkLabel" id="username_label">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">Unknown</property>
+ </object>
+ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+@@ -309,21 +373,27 @@
+ <child>
+ <object class="GtkLabel" id="status_label">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Unknown</property>
+ </object>
+ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
++ <property name="fill">True</property>
+ <property name="padding">5</property>
+ <property name="position">0</property>
+ </packing>
+@@ -332,8 +402,6 @@
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+- <property name="hscrollbar_policy">automatic</property>
+- <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTextView" id="messages_textview">
+@@ -348,6 +416,8 @@
+ </child>
+ </object>
+ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+@@ -358,6 +428,7 @@
+ <child type="tab">
+ <object class="GtkLabel" id="lblServerOptions">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Server Options</property>
+ </object>
+ <packing>
+@@ -367,6 +438,7 @@
+ <child>
+ <object class="GtkViewport" id="sam_viewport">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="resize_mode">queue</property>
+ <property name="shadow_type">none</property>
+ <child>
+@@ -380,6 +452,7 @@
+ <child type="tab">
+ <object class="GtkLabel" id="lblUserManager">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">User Manager</property>
+ </object>
+ <packing>
+@@ -388,7 +461,7 @@
+ </packing>
+ </child>
+ <child>
+- <object class="GtkViewport" id="regedit_viewport">
++ <object class="GtkViewport" id="srvsvc_viewport">
+ <property name="visible">True</property>
+ <property name="resize_mode">queue</property>
+ <property name="shadow_type">none</property>
+@@ -401,18 +474,45 @@
+ </packing>
+ </child>
+ <child type="tab">
++ <object class="GtkLabel" id="lblShareManager">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="label" translatable="yes">Share Manager</property>
++ </object>
++ <packing>
++ <property name="position">2</property>
++ <property name="tab_fill">False</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkViewport" id="regedit_viewport">
++ <property name="visible">True</property>
++ <property name="can_focus">False</property>
++ <property name="resize_mode">queue</property>
++ <property name="shadow_type">none</property>
++ <child>
++ <placeholder/>
++ </child>
++ </object>
++ <packing>
++ <property name="position">3</property>
++ </packing>
++ </child>
++ <child type="tab">
+ <object class="GtkLabel" id="lblRegEdit">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Registry Editor</property>
+ </object>
+ <packing>
+- <property name="position">2</property>
++ <property name="position">3</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkViewport" id="svcctl_viewport">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="resize_mode">queue</property>
+ <property name="shadow_type">none</property>
+ <child>
+@@ -420,22 +520,24 @@
+ </child>
+ </object>
+ <packing>
+- <property name="position">3</property>
++ <property name="position">4</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="lblServicesManager">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Services Manager</property>
+ </object>
+ <packing>
+- <property name="position">3</property>
++ <property name="position">4</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkViewport" id="crontab_viewport">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="resize_mode">queue</property>
+ <property name="shadow_type">none</property>
+ <child>
+@@ -443,16 +545,17 @@
+ </child>
+ </object>
+ <packing>
+- <property name="position">4</property>
++ <property name="position">5</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="lblTaskScheduler">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Task Scheduler</property>
+ </object>
+ <packing>
+- <property name="position">4</property>
++ <property name="position">5</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+@@ -464,14 +567,18 @@
+ </child>
+ </object>
+ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="statusbar_hbox">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkProgressBar" id="progressbar">
++ <property name="can_focus">False</property>
+ <property name="fraction">0.5</property>
+ </object>
+ <packing>
+@@ -483,27 +590,23 @@
+ <child>
+ <object class="GtkStatusbar" id="statusbar">
+ <property name="visible">True</property>
++ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ </object>
+ <packing>
++ <property name="expand">True</property>
++ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
++ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+- <object class="GtkImage" id="image1">
+- <property name="visible">True</property>
+- <property name="stock">gtk-missing-image</property>
+- </object>
+- <object class="GtkImage" id="image2">
+- <property name="visible">True</property>
+- <property name="stock">gtk-clear</property>
+- </object>
+ </interface>
+diff --git a/sambagtk/main.py b/sambagtk/main.py
+index 7cb7155..d96b684 100644
+--- a/sambagtk/main.py
++++ b/sambagtk/main.py
+@@ -11,6 +11,9 @@ import gtk.glade
+ import os.path
+ import getopt
+
++sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++
++
+ import pygwsam
+ import pygwregedit
+ import pygwcrontab
+@@ -100,6 +103,7 @@ class SambaUtilities(object):
+ self.svcctl_viewport = builder.get_object("svcctl_viewport")
+ self.crontab_viewport = builder.get_object("crontab_viewport")
+ self.regedit_viewport = builder.get_object("regedit_viewport")
++ self.srvsvc_viewport = builder.get_object("srvsvc_viewport")
+
+ self.progressbar = builder.get_object("progressbar")
+ self.statusbar = builder.get_object("statusbar")
+@@ -124,6 +128,24 @@ class SambaUtilities(object):
+
+ self.set_status("User tab initialized.")
+ self.update_sensitivity()
++
++ def init_srvsvc_page(self):
++
++ args = self.connection_args.copy()
++ if self.additional_connection_args.has_key("info_callback"):
++ args.update({"info_callback":self.additional_connection_args["info_callback"]})
++
++ self.srvsvc_window = pygwshare.ShareWindow(**args) #start up the utility
++ self.srvsvc_window.share_notebook.reparent(self.srvsvc_viewport) #reparent the main widget into a notebook tab
++ self.srvsvc_viewport.show_all() #unhide all widgets
++
++ #We'll be displaying this later. We need to unparent it before attaching it to another container
++ #self.srvsvc_window.menubar.unparent()
++ #self.srvsvc_window.toolbar.unparent()
++ self.srvsvc_window.statusbar = self.statusbar #we simply tell the utility to use our status bar instead
++
++ self.set_status("Share Manager tab initialized.")
++ self.update_sensitivity()
+
+ def init_regedit_page(self):
+ args = self.connection_args.copy()
+@@ -177,7 +199,10 @@ class SambaUtilities(object):
+
+ def regedit_initialized(self):
+ return self.regedit_window is not None
+-
++
++ def srvsvc_initialized (self):
++ return self.srvsvc_window is not None
++
+ def svcctl_initialized(self):
+ return self.svcctl_window is not None
+
+@@ -186,11 +211,12 @@ class SambaUtilities(object):
+
+ def update_sensitivity(self):
+ sam_connected = self.sam_initialized() and self.sam_window.connected()
++ srvsvc_connected = self.srvsvc_initialized() and self.srvsvc_window.connected()
+ regedit_connected = self.regedit_initialized() and self.regedit_window.connected()
+ svcctl_connected = self.svcctl_initialized() and self.svcctl_window.connected()
+ crontab_connected = self.crontab_initialized() and self.crontab_window.connected()
+- all_connected = sam_connected and regedit_connected and svcctl_connected and crontab_connected
+- all_disconnected = (not sam_connected) and (not regedit_connected) and (not svcctl_connected) and (not crontab_connected)
++ all_connected = sam_connected and regedit_connected and svcctl_connected and crontab_connected and srvsvc_connected
++ all_disconnected = (not sam_connected) and (not regedit_connected) and (not svcctl_connected) and (not crontab_connected) and (not srvsvc_connected)
+
+ self.connect_all_button.set_sensitive(not all_connected)
+ self.disconnect_all_button.set_sensitive(not all_disconnected)
+@@ -207,6 +233,8 @@ class SambaUtilities(object):
+ connected_utilities = []
+ if sam_connected:
+ connected_utilities.append("User Manager")
++ if srvsvc_connected:
++ connected_utilities.append("Share Manager")
+ if regedit_connected:
+ connected_utilities.append("Registry Editor")
+ if svcctl_connected:
+@@ -303,10 +331,12 @@ class SambaUtilities(object):
+ if current_page == 1:
+ self.sam_window.on_key_press(widget, event)
+ elif current_page == 2:
+- self.regedit_window.on_key_press(widget, event)
++ self.srvsvc_window.on_key_press(widget, event)
+ elif current_page == 3:
+- self.svcctl_window.on_key_press(widget, event)
++ self.regedit_window.on_key_press(widget, event)
+ elif current_page == 4:
++ self.svcctl_window.on_key_press(widget, event)
++ elif current_page == 5:
+ self.crontab_window.on_key_press(widget, event)
+
+ def on_utility_notebook_switch_page(self, widget, page, page_num):
+@@ -341,7 +371,28 @@ class SambaUtilities(object):
+ self.toolbar_viewport.add(self.sam_window.toolbar)
+ self.toolbar_viewport.show_all()
+
+- elif page_num == 2: #Regedit page
++
++ elif page_num == 2: #Share page
++ if self.srvsvc_viewport.child == None:
++ self.init_srvsvc_page()
++
++ #Menubar
++ children = self.menubar_viewport.get_children()
++ self.menubar_viewport.remove(children[0])
++ self.srvsvc_window.menubar.reparent(self.menubar_viewport)
++ #self.menubar_viewport.add(self.srvsvc_window.menubar)
++ self.menubar_viewport.show_all()
++
++ #Toolbar
++ children = self.toolbar_viewport.get_children()
++ self.toolbar_viewport.remove(children[0])
++ self.srvsvc_window.toolbar.unparent()
++ self.toolbar_viewport.add(self.srvsvc_window.toolbar)
++ self.toolbar_viewport.show_all()
++
++ self.srvsvc_window.hide()
++
++ elif page_num == 3: #Regedit page
+ if self.regedit_viewport.child == None:
+ self.init_regedit_page()
+
+@@ -357,7 +408,7 @@ class SambaUtilities(object):
+ self.toolbar_viewport.add(self.regedit_window.toolbar)
+ self.toolbar_viewport.show_all()
+
+- elif page_num == 3: #Services page
++ elif page_num == 4: #Services page
+ if self.svcctl_viewport.child == None:
+ self.init_svcctl_page()
+
+@@ -373,7 +424,7 @@ class SambaUtilities(object):
+ self.toolbar_viewport.add(self.svcctl_window.toolbar)
+ self.toolbar_viewport.show_all()
+
+- elif page_num == 4: #Crontab page
++ elif page_num == 5: #Crontab page
+ if self.crontab_viewport.child == None:
+ self.init_crontab_page()
+
+@@ -399,6 +450,12 @@ class SambaUtilities(object):
+ self.sam_window.on_connect_item_activate(None, **self.connection_args)
+ else:
+ self.init_sam_page()
++
++ if self.srvsvc_initialized():
++ if not self.srvsvc_window.connected():
++ self.srvsvc_window.on_connect_item_activate(None, **self.connection_args)
++ else:
++ self.init_srvsvc_page()
+
+ if self.regedit_initialized():
+ if not self.regedit_window.connected():
+@@ -425,6 +482,8 @@ class SambaUtilities(object):
+ def on_disconnect_all_button_clicked(self, widget):
+ if self.sam_initialized():
+ self.sam_window.on_disconnect_item_activate(None)
++ if self.srvsvc_initialized():
++ self.srvsvc_window.on_disconnect_item_activate(None)
+ if self.regedit_initialized():
+ self.regedit_window.on_disconnect_item_activate(None)
+ if self.svcctl_initialized():
+@@ -491,10 +550,11 @@ def ParseArgs(argv):
+ arguments.update({"connect_now":True})
+ return (arguments)
+
+-
++"""
+ if __name__ == "__main__":
+ arguments = ParseArgs(sys.argv[1:])
+ gtk.gdk.threads_init()
+ main_window = SambaUtilities(arguments)
+ sys.stdout = main_window #redirect print statements to the write() function of this class
+ gtk.main()
++"""
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index a72956a..17c780a 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -860,7 +860,7 @@ class ShareWindow(gtk.Window):
+ "A tool to manage user shares on a SRVS Share server.\n"
+ "Based on Jelmer Vernooij's original Samba-GTK",
+ self.icon_pixbuf)
+- dialog.set_copyright("Copyright \xc2\xa9 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>")
++ #dialog.set_copyright("Copyright \xc2\xa9 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>")
+ dialog.run()
+ dialog.hide()
+
+@@ -1334,15 +1334,14 @@ class ShareWindow(gtk.Window):
+ self.share_icon_filename = os.path.join(sys.path[0],"..", "images", "network.png")
+ self.icon_pixbuf = gtk.gdk.pixbuf_new_from_file(self.icon_filename)
+ self.set_icon(self.icon_pixbuf)
+- self.set_position(gtk.WIN_POS_CENTER)
+
+ accel_group = gtk.AccelGroup()
+- self.vbox = gtk.VBox(False, 0)
+- self.add(self.vbox)
++ vbox = gtk.VBox(False, 0)
++ self.add(vbox)
+
+ # menu
+ self.menubar = gtk.MenuBar()
+- self.vbox.pack_start(self.menubar, False, False, 0)
++ vbox.pack_start(self.menubar, False, False, 0)
+
+ self.file_item = gtk.MenuItem("_File")
+ self.menubar.add(self.file_item)
+@@ -1412,7 +1411,7 @@ class ShareWindow(gtk.Window):
+
+ # toolbar
+ self.toolbar = gtk.Toolbar()
+- self.vbox.pack_start(self.toolbar, False, False, 0)
++ vbox.pack_start(self.toolbar, False, False, 0)
+
+ self.connect_button = gtk.ToolButton(gtk.STOCK_CONNECT)
+ self.connect_button.set_is_important(True)
+@@ -1454,7 +1453,7 @@ class ShareWindow(gtk.Window):
+
+ #share-page
+ self.share_notebook = gtk.Notebook()
+- self.vbox.pack_start(self.share_notebook, True, True, 0)
++ vbox.pack_start(self.share_notebook, True, True, 0)
+
+ main_hbox = gtk.HBox()
+ self.share_notebook.append_page(main_hbox, gtk.Label("Share Management"))
+@@ -1689,7 +1688,7 @@ class ShareWindow(gtk.Window):
+
+ self.statusbar = gtk.Statusbar()
+ self.statusbar.set_has_resize_grip(True)
+- self.vbox.pack_start(self.statusbar, False, False, 0)
++ vbox.pack_start(self.statusbar, False, False, 0)
+
+ # signals/events
+
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index 22fd5ef..d159201 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -961,7 +961,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+ self.fields_box.show_all()
+
+
+- if self.page == 1:
++ elif self.page == 1:
+ self.title_label.set_markup('<b>Name and Password</b>')
+ self.info_label.set_text('Please enter a valid name and password (optional) for your share.')
+ self.prev_button.set_sensitive(True)
+@@ -993,7 +993,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+ self.fields_box.show_all()
+
+
+- if self.page == 2:
++ elif self.page == 2:
+ self.title_label.set_markup('<b>Comment and Max Users </b>')
+ self.info_label.set_text('Please enter a comment(optional) and select max users')
+ self.prev_button.set_sensitive(True)
+@@ -1022,7 +1022,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+ self.fields_box.pack_start(table,False,True,0)
+ self.fields_box.show_all()
+
+- if self.page == 3:
++ elif self.page == 3:
+ self.title_label.set_markup('<b>Share Type Options</b>')
+ self.info_label.set_text('Please select your share type options.')
+ self.prev_button.set_sensitive(True)
+@@ -1076,7 +1076,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+
+
+
+- if self.page == 4:
++ else :
+ self.title_label.set_markup('<b>Path</b>')
+ if self.islocal:
+ self.info_label.set_text('Please select a valid path.')
+
+commit aca6211e2409a908333091951159a8ed284e94d3
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Wed Aug 3 20:28:07 2011 +0530
+
+ fields validate fixed , now handles both wizard and dialog
+
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index 1cc264e..a72956a 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -211,12 +211,12 @@ class srvsvcPipeManager(object):
+ if os.path.exists(path):
+ path = os.path.realpath(path) # gets canonical path
+ else:
+- raise OSError
++ raise OSError("Path does not exist !")
+
+- if path.startswith('/'):
+- path = path.replace('/', '\\')
+- path = ''.join(['C:',path])
+- path = unicode(path)
++ if path.startswith('/'):
++ path = path.replace('/', '\\')
++ path = ''.join(['C:',path])
++ path = unicode(path)
+
+ return path
+
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index 2c65b52..22fd5ef 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -270,15 +270,20 @@ class ShareAddEditDialog(gtk.Dialog):
+
+ def validate_fields(self):
+
+- if len(self.sname) == 0:
++ if type(self) is ShareAddEditDialog :
++ name = self.share_name_entry.get_text()
++ elif type(self) is ShareWizardDialog :
++ name = self.sname
++
++ if len(name) == 0:
+ return "Share name may not be empty!"
+
+- if not self.pipe.name_validate(self.sname):
++ if not self.pipe.name_validate(name):
+ return "Invalid Share name"
+
+ if (not self.edit_mode):
+ for share in self.pipe.share_list:
+- if share.name == self.share_name_entry.get_text():
++ if share.name == name:
+ return ' '.join(["A Share with the name : ", share.name ,"already exists!"])
+
+ return None
+
+commit c8b9a88c9ab45a7ce6badc2cc44066176729a759
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date: Wed Aug 3 07:34:55 2011 +0530
+
+ wizard history fixup , custom collects
+
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index efbc19b..1cc264e 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -984,7 +984,8 @@ class ShareWindow(gtk.Window):
+ def on_new_item_activate(self, widget,wizard_mode=False):
+
+ share = self.run_share_add_edit_dialog(wizard_mode=wizard_mode)
+- #print share.type TODO cleanup post debug
++ #TODO cleanup Debug
++ #print share.name,share.comment,share.password,str(share.type),str(share.max_users),share.path
+ if share is None:
+ self.set_status("Share creation canceled.")
+ return
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index 7a02769..2c65b52 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -270,7 +270,7 @@ class ShareAddEditDialog(gtk.Dialog):
+
+ def validate_fields(self):
+
+- if len(self.share_name_entry.get_text()) == 0:
++ if len(self.sname) == 0:
+ return "Share name may not be empty!"
+
+ if not self.pipe.name_validate(self.sname):
+@@ -962,8 +962,8 @@ class ShareWizardDialog(ShareAddEditDialog):
+ self.prev_button.set_sensitive(True)
+ self.next_button.set_sensitive(True)
+ self.ok_button.set_sensitive(False)
+- if self.name is not None:
+- self.share_name_entry.set_text(self.name)
++ if self.sname is not None:
++ self.share_name_entry.set_text(self.sname)
+ if self.password is not None:
+ self.share_comment_entry.set_text(self.password)
+
+@@ -1114,3 +1114,40 @@ class ShareWizardDialog(ShareAddEditDialog):
+
+ self.fields_box.pack_start(table,False,True,0)
+ self.fields_box.show_all()
++
++ def collect_fields (self):
++ """ Custom collect fields from the GUI and saves in class variables which is page specific. """
++ if self.page == 0:
++ pass
++
++ elif self.page == 1 :
++ self.sname = self.share_name_entry.get_text()
++ self.password = self.share_password_entry.get_text()
++
++
++ elif self.page == 2:
++ self.comment = self.share_comment_entry.get_text()
++ self.max_users = self.max_users_spinbox.get_value_as_int()
++
++ elif self.page ==3 :
++ # Now to handle the share type resolution
++ if self.stype_disktree_radio_button.get_active() :
++ self.stype = srvsvc.STYPE_DISKTREE
++ elif self.stype_printq_radio_button.get_active() :
++ self.stype = srvsvc.STYPE_PRINTQ
++ else:
++ self.stype = srvsvc.STYPE_IPC
++ # check flags
++ self.flags = [False,False]
++ if self.sflag_temp_check_button.get_active():
++ self.flags[0] = True
++ if self.sflag_hidden_check_button.get_active():
++ self.flags[1] = True
++
++ else :
++ if self.islocal :
++ self.path = self.file_button.get_filename()
++ else:
++ self.path = self.path_entry.get_text()
++
++