The branch, build-59a18b6e3b5d3f1dd8f07f26433d37fe5984a57d has been updated via f8bf3631945ce3d1d675ff4434d77f7cfc6c5659 (commit) from 2e084470dedc09b2d165e46d6693d400b9ec795f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: pyhoca/wxgui/menus_taskbar.py | 11 +-- pyhoca/wxgui/profilemanager.py | 144 ++++++++++++++++++++++++++++++---------- 2 files changed, 117 insertions(+), 38 deletions(-) The diff of changes is: diff --git a/pyhoca/wxgui/menus_taskbar.py b/pyhoca/wxgui/menus_taskbar.py index ac1860f..f7aae23 100644 --- a/pyhoca/wxgui/menus_taskbar.py +++ b/pyhoca/wxgui/menus_taskbar.py @@ -168,6 +168,8 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu): ID_SHARELOCALFOLDER = wx.NewId() ID_DISCONNECT = wx.NewId() + current_profile_config = self._PyHocaGUI.get_profile_config(profile_name) + # preparing profile_name information for the main PyHocaGUI instance self._PyHocaGUI._eventid_profilenames_map[ID_SESSIONSTART] = \ self._PyHocaGUI._eventid_profilenames_map[ID_CLEANSESSIONS] = \ @@ -203,13 +205,14 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu): self.Append(id=ID_CLEANSESSIONS, text="&Clean all sessions") self.AppendSeparator() self.Append(id=ID_EDITPROFILEWHILECONNECTED, text="Customize &profile") - _share_folder = self.Append(id=ID_SHARELOCALFOLDER, text="Share local &folder") + if current_profile_config['useexports']: + _share_folder = self.Append(id=ID_SHARELOCALFOLDER, text="Share local &folder") + if not self._PyHocaGUI._X2goClient__client_associated_sessions_of_profile_name(profile_name): + _share_folder.Enable(False) + self.AppendSeparator() self.Append(id=ID_DISCONNECT, text="&Disconnect from Server") - if not self._PyHocaGUI._X2goClient__client_associated_sessions_of_profile_name(profile_name): - _share_folder.Enable(False) - self._PyHocaGUI.current_profile_name = profile_name self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionStart, id=ID_SESSIONSTART) self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnCleanSessions, id=ID_CLEANSESSIONS) diff --git a/pyhoca/wxgui/profilemanager.py b/pyhoca/wxgui/profilemanager.py index 74fc795..167dc45 100644 --- a/pyhoca/wxgui/profilemanager.py +++ b/pyhoca/wxgui/profilemanager.py @@ -23,6 +23,7 @@ import os import copy import x2go.log as log +import x2go.utils as utils from x2go import X2GOCLIENT_OS from x2go import defaults @@ -31,6 +32,7 @@ import notify import basepath _icons_location = basepath.icons_basepath +_known_encodings = utils.known_encodings() class PyHocaGUI_ProfileManager(wx.Dialog): """\ @@ -205,25 +207,32 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.PulseAudio = wx.RadioButton(self.tab_Settings, -1, "Pulse Audio", style=wx.RB_GROUP) self.Arts = wx.RadioButton(self.tab_Settings, -1, "Arts") self.esd = wx.RadioButton(self.tab_Settings, -1, "esd") - self.SoundTunnel = wx.CheckBox(self.tab_Settings, -1, "Use SSH port forwarding to tunnel sound system\nconnections through firewall") self.DefaultSoundPort = wx.CheckBox(self.tab_Settings, -1, "Use default sound port") self.SoundPortLabel = wx.StaticText(self.tab_Settings, -1, "Custom sound port:") self.SoundPort = wx.SpinCtrl(self.tab_Settings, -1, "4713", min=23, max=64889) self.ClientSidePrinting = wx.CheckBox(self.tab_Settings, -1, "Client Side printing") + self.UseLocalFolderSharing = wx.CheckBox(self.tab_SharedFolders, -1, "Use local folder sharing") self.SharedFolderPathLabel = wx.StaticText(self.tab_SharedFolders, -1, "Path:") - self.SharedFolderPath = wx.TextCtrl(self.tab_SharedFolders, -1, "") + self.SharedFolderPath = wx.TextCtrl(self.tab_SharedFolders, -1, "", style=wx.TE_PROCESS_ENTER) self.SharedFolderPathBrowseButton = wx.BitmapButton(self.tab_SharedFolders, -1, wx.Bitmap('%s/PyHoca/16x16/system-search.png' % _icons_location, wx.BITMAP_TYPE_ANY)) self.AddSharedFolderPathButton = wx.Button(self.tab_SharedFolders, -1, "Add") self.SharedFoldersList = wx.ListCtrl(self.tab_SharedFolders, -1, style=wx.LC_LIST|wx.SUNKEN_BORDER|wx.LC_SINGLE_SEL|wx.LC_VRULES) self.DeleteSharedFolderPathButton = wx.Button(self.tab_SharedFolders, -1, "Delete") - self.SSHFSPortForwarding = wx.CheckBox(self.tab_SharedFolders, -1, "Use ssh port forwarding to tunnel file system connections through firewalls") + + self.UseEncodingConverter = wx.CheckBox(self.tab_SharedFolders, -1, "Convert between client and server encodings") + self.ClientEncodingLabel = wx.StaticText(self.tab_SharedFolders, -1, "Client encoding:") + self.ClientEncoding = wx.ComboBox(self.tab_SharedFolders, -1, choices=_known_encodings, style=wx.CB_DROPDOWN|wx.CB_READONLY) + self.ServerEncodingLabel = wx.StaticText(self.tab_SharedFolders, -1, "Server encoding:") + self.ServerEncoding = wx.ComboBox(self.tab_SharedFolders, -1, choices=_known_encodings, style=wx.CB_DROPDOWN|wx.CB_READONLY) + if self.action == 'ADD': self.OKButton = wx.Button(self, -1, "Add") self.DefaultButton = wx.Button(self, -1, 'Defaults') else: self.OKButton = wx.Button(self, -1, "Save") self.DefaultButton = wx.Button(self, -1, 'Reset') + self.OKButton.SetDefault() self.CancelButton = wx.Button(self, -1, "Cancel") self.__set_properties() @@ -244,10 +253,15 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.Bind(wx.EVT_BUTTON, self.OnSelectSharedFolderPath, self.SharedFolderPathBrowseButton) self.Bind(wx.EVT_BUTTON, self.OnAddSharedFolderPath, self.AddSharedFolderPathButton) self.Bind(wx.EVT_BUTTON, self.OnDeleteSharedFolderPath, self.DeleteSharedFolderPathButton) + self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnSharedFolderListItemSelected, self.SharedFoldersList) + self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnSharedFolderListItemDeselected, self.SharedFoldersList) + self.Bind(wx.EVT_TEXT, self.OnSharedFolderPathKeyPressed, self.SharedFolderPath) + self.Bind(wx.EVT_TEXT_ENTER, self.OnAddSharedFolderPath, self.SharedFolderPath) + self.Bind(wx.EVT_CHECKBOX, self.OnToggleEncodingConverter, self.UseEncodingConverter) + self.Bind(wx.EVT_CHECKBOX, self.OnToggleLocalFolderSharing, self.UseLocalFolderSharing) self.Bind(wx.EVT_BUTTON, self.OnOKButton, self.OKButton) self.Bind(wx.EVT_BUTTON, self.OnCancel, self.CancelButton) self.Bind(wx.EVT_BUTTON, self.OnDefault, self.DefaultButton) - self.SetSize(self.GetBestSize()) self.Show(True) @@ -320,7 +334,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.EnableSound.SetValue(1) self.PulseAudio.SetMinSize((120, _textfield_height)) self.PulseAudio.SetValue(1) - self.SoundTunnel.SetValue(1) self.Arts.SetMinSize((120, _textfield_height)) self.DefaultSoundPort.SetValue(1) self.esd.SetMinSize((120, 21)) @@ -328,8 +341,10 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.ClientSidePrinting.SetValue(1) self.SharedFolderPath.SetMinSize((220, _textfield_height)) self.SharedFolderPathBrowseButton.SetSize(self.SharedFolderPathBrowseButton.GetBestSize()) - self.SharedFoldersList.SetMinSize((303, 300)) - self.SSHFSPortForwarding.SetValue(1) + self.SharedFoldersList.SetMinSize((303, 240)) + self.ClientEncoding.SetMinSize((140, _textfield_height)) + self.ServerEncoding.SetMinSize((140, _textfield_height)) + self.OKButton.SetMinSize((60, 30)) self.CancelButton.SetMinSize((60, 30)) self.DefaultButton.SetMinSize((60, 30)) @@ -427,11 +442,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog): sizer_2_2_1 = wx.BoxSizer(wx.VERTICAL) sizer_2_2_1.Add(self.LinkSpeed, 0, 0, 0) sizer_2_2_2 = wx.GridSizer(1,5,0,0) - #sizer_2_2_2.AddGrowableCol(0) - #sizer_2_2_2.AddGrowableCol(1) - #sizer_2_2_2.AddGrowableCol(2) - #sizer_2_2_2.AddGrowableCol(3) - #sizer_2_2_2.AddGrowableCol(4) sizer_2_2_2.Add(self.ModemLabel, 0, wx.ALIGN_CENTRE_HORIZONTAL, 0) sizer_2_2_2.Add(self.ISDNLabel, 0, wx.ALIGN_CENTRE_HORIZONTAL, 0) sizer_2_2_2.Add(self.ADSLLabel, 0, wx.ALIGN_CENTRE_HORIZONTAL, 0) @@ -504,7 +514,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog): sizer_3_3_2_1.Add(self.esd, 0, 0, 0) sizer_3_3_2.Add(sizer_3_3_2_1, 0, 0, 0) sizer_3_3_2_2 = wx.BoxSizer(wx.VERTICAL) - sizer_3_3_2_2.Add(self.SoundTunnel, 0, 0, 0) sizer_3_3_2_2.Add(self.DefaultSoundPort, 0, 0, 0) sizer_3_3_2_2_1 = wx.BoxSizer(wx.HORIZONTAL) sizer_3_3_2_2_1.Add(self.SoundPortLabel, 0, wx.ALIGN_CENTRE_VERTICAL, 0) @@ -527,23 +536,31 @@ class PyHocaGUI_ProfileManager(wx.Dialog): # FOLDERSHARING TAB sizer_4 = wx.BoxSizer(wx.VERTICAL) sizer_4_1 = wx.StaticBoxSizer(self.staticbox_FolderSharing, wx.VERTICAL) - sizer_4_1_1 = wx.GridSizer(2, 2, 0, 0) - sizer_4_1_1_1 = wx.BoxSizer(wx.HORIZONTAL) - sizer_4_1_1_1.Add(self.SharedFolderPathLabel, 0, wx.ALIGN_CENTRE_VERTICAL, 0) - sizer_4_1_1_1.Add(self.SharedFolderPath, 0, wx.ALIGN_CENTRE_VERTICAL, 0) - sizer_4_1_1_1.Add(self.SharedFolderPathBrowseButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0) - sizer_4_1_1_2 = wx.BoxSizer(wx.HORIZONTAL) - sizer_4_1_1_2.Add(self.AddSharedFolderPathButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0) - sizer_4_1_1.Add(sizer_4_1_1_1, 0, wx.LEFT, 0, 0) - sizer_4_1_1.Add(sizer_4_1_1_2, 0, wx.RIGHT, 0, 0) + sizer_4_1_1 = wx.BoxSizer(wx.HORIZONTAL) + sizer_4_1_1.Add(self.UseLocalFolderSharing, 0, 0, 0) sizer_4_1_2 = wx.BoxSizer(wx.HORIZONTAL) - sizer_4_1_2.Add(self.SharedFoldersList, 1, wx.EXPAND, 0) + sizer_4_1_2.Add(self.SharedFolderPathLabel, 0, wx.ALIGN_CENTRE_VERTICAL, 0) + sizer_4_1_2.Add(self.SharedFolderPath, 0, wx.ALIGN_CENTRE_VERTICAL, 0) + sizer_4_1_2.Add(self.SharedFolderPathBrowseButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0) + sizer_4_1_2.Add(self.AddSharedFolderPathButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0) + sizer_4_1_2.Add(self.DeleteSharedFolderPathButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0) sizer_4_1_3 = wx.BoxSizer(wx.HORIZONTAL) - sizer_4_1_3.Add(self.DeleteSharedFolderPathButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0) - sizer_4_1_3.Add(self.SSHFSPortForwarding, 0, wx.ALIGN_CENTRE_VERTICAL, 0) - sizer_4_1.Add(sizer_4_1_1, 0, 0, 0) + sizer_4_1_3.Add(self.SharedFoldersList, 1, wx.EXPAND, 0) + sizer_4_1_4 = wx.BoxSizer(wx.HORIZONTAL) + sizer_4_1_4.Add(self.UseEncodingConverter, 0, 0, 0) + sizer_4_1_5 = wx.BoxSizer(wx.HORIZONTAL) + sizer_4_1_5.Add(self.ClientEncodingLabel, 0, wx.ALIGN_CENTRE_VERTICAL, 0) + sizer_4_1_5.Add((8,0)) + sizer_4_1_5.Add(self.ClientEncoding, 0, 0, 0) + sizer_4_1_5.Add((16,0)) + sizer_4_1_5.Add(self.ServerEncodingLabel, 0, wx.ALIGN_CENTRE_VERTICAL, 0) + sizer_4_1_5.Add((8,0)) + sizer_4_1_5.Add(self.ServerEncoding, 0, 0, 0) + sizer_4_1.Add(sizer_4_1_1, 0, wx.EXPAND, 0) sizer_4_1.Add(sizer_4_1_2, 0, wx.EXPAND, 0) sizer_4_1.Add(sizer_4_1_3, 0, wx.EXPAND, 0) + sizer_4_1.Add(sizer_4_1_4, 0, wx.EXPAND, 0) + sizer_4_1.Add(sizer_4_1_5, 0, wx.EXPAND, 0) sizer_4.Add(sizer_4_1, 0, wx.EXPAND, 0) self.tab_SharedFolders.SetSizer(sizer_4) @@ -722,7 +739,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.KeyboardModel.Enable(True) self.EnableSound.SetValue(self.profile_config['sound']) - self.SoundTunnel.SetValue(self.profile_config['soundtunnel']) self.DefaultSoundPort.SetValue(self.profile_config['defsndport']) self.SoundPort.SetValue(self.profile_config['sndport']) if self.profile_config['soundsystem'] == 'pulse': @@ -733,7 +749,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.esd.SetValue(True) if self.profile_config['sound']: self.PulseAudio.Enable(True) - self.SoundTunnel.Enable(True) self.Arts.Enable(True) self.esd.Enable(True) self.DefaultSoundPort.Enable(True) @@ -745,7 +760,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.SoundPort.Enable(False) else: self.PulseAudio.Enable(False) - self.SoundTunnel.Enable(False) self.Arts.Enable(False) self.esd.Enable(False) self.DefaultSoundPort.Enable(False) @@ -753,7 +767,9 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.SoundPort.Enable(False) self.ClientSidePrinting.SetValue(self.profile_config['print']) - self.SSHFSPortForwarding.SetValue(self.profile_config['fstunnel']) + + self.UseLocalFolderSharing.SetValue(self.profile_config['useexports']) + self._toggle_localFolderSharing() self.SharedFoldersList.DeleteAllItems() _shared_folders = self.profile_config['export'].strip().strip(',').strip() @@ -763,6 +779,13 @@ class PyHocaGUI_ProfileManager(wx.Dialog): _item.SetData(wx.NewId()) _item.SetText(_shared_folder_path) self.SharedFoldersList.InsertItem(_item) + self.AddSharedFolderPathButton.Enable(False) + self.DeleteSharedFolderPathButton.Enable(False) + + self.UseEncodingConverter.SetValue(self.profile_config['useiconv']) + self.ClientEncoding.SetValue(self.profile_config['iconvfrom']) + self.ServerEncoding.SetValue(self.profile_config['iconvto']) + self._toggle_useEncodingConverter() self.disable_EditConnected_options() @@ -854,7 +877,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.profile_config['type'] = self.KeyboardModel.GetValue() self.profile_config['sound'] = self.EnableSound.GetValue() - self.profile_config['soundtunnel'] = self.SoundTunnel.GetValue() self.profile_config['defsndport'] = self.DefaultSoundPort.GetValue() self.profile_config['sndport'] = self.SoundPort.GetValue() if self.PulseAudio.GetValue(): @@ -865,8 +887,8 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.profile_config['soundsystem'] = 'esd' self.profile_config['print'] = self.ClientSidePrinting.GetValue() - self.profile_config['fstunnel'] = self.SSHFSPortForwarding.GetValue() + self.profile_config['useexports'] = self.UseLocalFolderSharing.GetValue() _shared_folders = [] _item_id = self.SharedFoldersList.GetTopItem() while _item_id != -1: @@ -874,6 +896,9 @@ class PyHocaGUI_ProfileManager(wx.Dialog): _shared_folders.append(_item.GetText()) _item_id = self.SharedFoldersList.GetNextItem(_item_id) self.profile_config['export'] = ','.join(_shared_folders) + self.profile_config['useiconv'] = self.UseEncodingConverter.GetValue() + self.profile_config['iconvfrom'] = self.ClientEncoding.GetValue() + self.profile_config['iconvto'] = self.ServerEncoding.GetValue() def OnIconChange(self, event): _share_location = os.path.split(_icons_location)[0] @@ -1064,7 +1089,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.PulseAudio.Enable(True) self.Arts.Enable(True) self.esd.Enable(True) - self.SoundTunnel.Enable(True) self.DefaultSoundPort.Enable(True) if self.DefaultSoundPort.GetValue() is False: self.SoundPortLabel.Enable(True) @@ -1073,7 +1097,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.PulseAudio.Enable(False) self.Arts.Enable(False) self.esd.Enable(False) - self.SoundTunnel.Enable(False) self.DefaultSoundPort.Enable(False) self.SoundPortLabel.Enable(False) self.SoundPort.Enable(False) @@ -1104,6 +1127,30 @@ class PyHocaGUI_ProfileManager(wx.Dialog): else: self.DisplayDPI.Enable(False) + def _toggle_localFolderSharing(self): + if self.UseLocalFolderSharing.GetValue(): + self.SharedFolderPathLabel.Enable(True) + self.SharedFolderPath.Enable(True) + self.SharedFolderPathBrowseButton.Enable(True) + self.SharedFoldersList.Enable(True) + self.UseEncodingConverter.Enable(True) + self._toggle_useEncodingConverter() + else: + self.AddSharedFolderPathButton.Enable(False) + self.DeleteSharedFolderPathButton.Enable(False) + self.SharedFolderPathLabel.Enable(False) + self.SharedFolderPath.Enable(False) + self.SharedFolderPathBrowseButton.Enable(False) + self.SharedFoldersList.Enable(False) + self.UseEncodingConverter.Enable(False) + self.ClientEncodingLabel.Enable(False) + self.ClientEncoding.Enable(False) + self.ServerEncodingLabel.Enable(False) + self.ServerEncoding.Enable(False) + + def OnToggleLocalFolderSharing(self, event): + self._toggle_localFolderSharing() + def OnSelectSharedFolderPath(self, event): shared_folder = os.path.expanduser('~') if not os.path.exists(shared_folder): @@ -1116,6 +1163,15 @@ class PyHocaGUI_ProfileManager(wx.Dialog): # This returns a Python list of files that were selected. self.SharedFolderPath.SetValue(dlg.GetPath()) + def OnSharedFolderListItemSelected(self, event): + self.DeleteSharedFolderPathButton.Enable(True) + + def OnSharedFolderListItemDeselected(self, event): + self.DeleteSharedFolderPathButton.Enable(False) + + def OnSharedFolderPathKeyPressed(self, event): + self.AddSharedFolderPathButton.Enable(True) + def OnAddSharedFolderPath(self, event): _shared_folder_path = self.SharedFolderPath.GetValue() if _shared_folder_path and (self.SharedFoldersList.FindItem(0, _shared_folder_path) == -1): @@ -1123,10 +1179,28 @@ class PyHocaGUI_ProfileManager(wx.Dialog): _item.SetData(wx.NewId()) _item.SetText(_shared_folder_path) self.SharedFoldersList.InsertItem(_item) + self.SharedFolderPath.SetValue('') + self.AddSharedFolderPathButton.Enable(False) def OnDeleteSharedFolderPath(self, event): _item = self.SharedFoldersList.GetFocusedItem() self.SharedFoldersList.DeleteItem(_item) + self.DeleteSharedFolderPathButton.Enable(False) + + def _toggle_useEncodingConverter(self): + if self.UseEncodingConverter.GetValue(): + self.ClientEncodingLabel.Enable(True) + self.ClientEncoding.Enable(True) + self.ServerEncodingLabel.Enable(True) + self.ServerEncoding.Enable(True) + else: + self.ClientEncodingLabel.Enable(False) + self.ClientEncoding.Enable(False) + self.ServerEncodingLabel.Enable(False) + self.ServerEncoding.Enable(False) + + def OnToggleEncodingConverter(self, event): + self._toggle_useEncodingConverter() def __validate(self): validateOk = True @@ -1166,6 +1240,8 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.Close() self.Destroy() + wx.EndBusyCursor() + def OnCancel(self, event): self.Close() self.Destroy() hooks/post-receive -- pyhoca-gui.git (Python X2Go Client (wxPython GUI)) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "pyhoca-gui.git" (Python X2Go Client (wxPython GUI)).