share handling rework
[samba-gtk.git] / srvsvc.py
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 """ srvsvc related dialogues"""
5
6 import gtk
7 import gobject
8 import os
9 import sys
10
11
12 class srvsvcConnectDialog(gtk.Dialog):
13
14     """Connect Dialog"""
15
16     def __init__(
17         self,
18         server,
19         transport_type,
20         username,
21         password='',
22         ):
23         super(srvsvcConnectDialog, self).__init__()
24
25         self.server_address = server
26         self.username = username
27         self.password = password
28         self.transport_type = transport_type
29
30         self.create()
31
32         self.update_sensitivity()
33
34     def create(self):
35         self.set_title('Connect to Samba Share Server')
36         self.set_border_width(5)
37         self.set_icon_name(gtk.STOCK_CONNECT)
38         self.set_resizable(False)
39
40         self.vbox.set_spacing(5)
41
42         # artwork
43         
44         self.artwork = gtk.VBox()
45
46         self.samba_image_filename = os.path.join(sys.path[0], 'images',
47                 'samba-logo-small.png')
48         self.samba_image = gtk.Image()
49         self.samba_image.set_from_file(self.samba_image_filename)
50         self.artwork.pack_start(self.samba_image, True, True, 0)
51
52         label = gtk.Label('Opening Windows to A Wider World')
53         box = gtk.HBox()
54         box.pack_start(label, True, True, 0)
55         self.artwork.pack_start(box, True, True, 0)
56
57         label = gtk.Label('Samba Control Center')
58         box = gtk.HBox()
59         box.pack_start(label, True, True, 0)
60         self.artwork.pack_start(box, True, True, 0)
61
62         self.vbox.pack_start(self.artwork, False, True, 0)
63
64         # server frame
65         
66         self.server_frame = gtk.Frame('Server')
67         self.vbox.pack_start(self.server_frame, False, True, 0)
68
69         table = gtk.Table(3, 2)
70         table.set_border_width(5)
71         self.server_frame.add(table)
72
73         label = gtk.Label(' Server address: ')
74         label.set_alignment(0, 0.5)
75         table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
76
77         self.server_address_entry = gtk.Entry()
78         self.server_address_entry.set_text(self.server_address)
79         self.server_address_entry.set_activates_default(True)
80         self.server_address_entry.set_tooltip_text('Enter the Server Address')
81         table.attach(self.server_address_entry, 1, 2, 0, 1, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
82
83         label = gtk.Label(' Username: ')
84         label.set_alignment(0, 0.5)
85         table.attach(label,0,1,1,2,gtk.FILL,gtk.FILL | gtk.EXPAND,0,0)
86
87         self.username_entry = gtk.Entry()
88         self.username_entry.set_text(self.username)
89         self.username_entry.set_activates_default(True)
90         self.username_entry.set_tooltip_text('Enter your Username')
91         table.attach(self.username_entry,1,2,1,2,gtk.FILL | gtk.EXPAND,gtk.FILL | gtk.EXPAND,1,1)
92         label = gtk.Label(' Password: ')
93         label.set_alignment(0, 0.5)
94         table.attach(label, 0, 1, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
95
96         self.password_entry = gtk.Entry()
97         self.password_entry.set_text(self.password)
98         self.password_entry.set_visibility(False)
99         self.password_entry.set_activates_default(True)
100         self.password_entry.set_tooltip_text('Enter your Password')
101         table.attach(self.password_entry, 1, 2, 2, 3, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
102
103         # transport frame
104         
105         self.transport_frame = gtk.Frame(' Transport type ')
106         self.vbox.pack_start(self.transport_frame, False, True, 0)
107
108         vbox = gtk.VBox()
109         vbox.set_border_width(5)
110         self.transport_frame.add(vbox)
111
112         self.rpc_smb_tcpip_radio_button = gtk.RadioButton(None,
113                 'RPC over SMB over TCP/IP ')
114         self.rpc_smb_tcpip_radio_button.set_tooltip_text('ncacn_np type : Recomended (default)'
115                 )  # # according MS-SRVS specification
116         self.rpc_smb_tcpip_radio_button.set_active(self.transport_type
117                  == 0)
118         vbox.pack_start(self.rpc_smb_tcpip_radio_button)
119
120         self.rpc_tcpip_radio_button = \
121             gtk.RadioButton(self.rpc_smb_tcpip_radio_button,
122                             'RPC over TCP/IP')
123         self.rpc_tcpip_radio_button.set_tooltip_text('ncacn_ip_tcp type')
124         self.rpc_tcpip_radio_button.set_active(self.transport_type == 1)
125         vbox.pack_start(self.rpc_tcpip_radio_button)
126
127         self.localhost_radio_button = \
128             gtk.RadioButton(self.rpc_tcpip_radio_button, 'Localhost')
129         self.localhost_radio_button.set_tooltip_text('ncalrpc type')  # # MS-SRVS specification
130         self.localhost_radio_button.set_active(self.transport_type == 2)
131         vbox.pack_start(self.localhost_radio_button)
132
133         self.action_area.set_layout(gtk.BUTTONBOX_END)
134
135         self.cancel_button = gtk.Button('Cancel', gtk.STOCK_CANCEL)
136         self.cancel_button.set_tooltip_text('Cancel and Quit')
137         self.add_action_widget(self.cancel_button, gtk.RESPONSE_CANCEL)
138
139         self.connect_button = gtk.Button('Connect', gtk.STOCK_CONNECT)
140         self.connect_button.set_flags(gtk.CAN_DEFAULT)
141         self.connect_button.set_tooltip_text('OK / Connect to Server')
142         self.add_action_widget(self.connect_button, gtk.RESPONSE_OK)
143
144         self.set_default_response(gtk.RESPONSE_OK)
145
146         self.rpc_smb_tcpip_radio_button.connect('toggled',
147                 self.on_radio_button_toggled)
148         self.rpc_tcpip_radio_button.connect('toggled',
149                 self.on_radio_button_toggled)
150         self.localhost_radio_button.connect('toggled',
151                 self.on_radio_button_toggled)
152
153     def get_server_address(self):
154             return self.server_address_entry.get_text().strip()
155
156     def get_username(self):
157             return self.username_entry.get_text().strip()
158
159     def get_password(self):
160             return self.password_entry.get_text()
161
162     def update_sensitivity(self):
163             server_required = \
164                 not self.localhost_radio_button.get_active()
165             self.server_address_entry.set_sensitive(server_required)
166
167     def get_transport_type(self):
168             if self.rpc_smb_tcpip_radio_button.get_active():
169                 return 0
170             elif self.rpc_tcpip_radio_button.get_active():
171                 return 1
172             elif self.localhost_radio_button.get_active():
173                 return 2
174             else:
175                 return -1
176
177     def on_radio_button_toggled(self, widget):
178             self.update_sensitivity()
179
180
181 class ShareAddEditDialog(gtk.Dialog):
182
183     """ Share add and edit dialog 
184  
185  If 'edit_mode' is set to True then in Edit mode .
186  Immutable fields are automatically greyed out.
187   """
188
189     def __init__(self, pipe_manager, share=None):
190         """ Class initialiser """
191         super(ShareAddEditDialog, self).__init__()
192         self.pipe = pipe_manager
193         if share is None :
194             self.edit_mode = 0
195             
196                 else :
197             self.edit_mode =  1
198             self.share = share
199         
200
201     def  create():
202         """ Create the window """
203         self.set_title([" New Share"," Edit Share : "][self.edit_mode]+ " " + self.share.name)
204         self.set_border_width(5)
205         self.icon_name = ["network-folder","network-printer","network-pipe"][self.share_category] 
206         self.set_icon_from_file(os.path.join(sys.path[0], "images", self.icon_name))
207         
208         
209         
210         
211