def onSyncButton(self, event): if not pavlovia.haveGit: noGitWarning(parent=self.parent) return 0 if self.project is None: raise AttributeError("User pressed the sync button with no " "current project existing.") # log in first if needed if not pavlovia.getCurrentSession().user: logInPavlovia(parent=self.parent) return # fork first if needed perms = self.project.permissions if not perms or perms < pavlovia.permissions['developer']: # specifying the group to fork to has no effect so don't use it # dlg = ForkDlg(parent=self.parent, project=self.project) # if dlg.ShowModal() == wx.ID_CANCEL: # return # else: # newGp = dlg.groupField.GetStringSelection() # newName = dlg.nameField.GetValue() fork = self.project.forkTo() # logged-in user self.setProject(fork.id) # if project.localRoot doesn't exist, or is empty if 'localRoot' not in self.project or not self.project.localRoot: # we first need to choose a location for the repository newPath = setLocalPath(self, self.project) if newPath: self.localFolderCtrl.SetLabel( label=_translate("Local root: {}").format(newPath)) self.project.local = newPath self.Layout() self.Raise() syncPanel = sync.SyncStatusPanel(parent=self, id=wx.ID_ANY) self.sizer.Add(syncPanel, border=5, proportion=1, flag=wx.ALL | wx.RIGHT | wx.EXPAND) self.sizer.Layout() wx.Yield() self.project.sync(infoStream=syncPanel.infoStream) syncPanel.Destroy() self.sizer.Layout() self.parent.Raise()
def __init__(self, parent, noTitle=False, style=wx.VSCROLL | wx.NO_BORDER, project={}): scrlpanel.ScrolledPanel.__init__(self, parent, -1, style=style) self.parent = parent self.project = project # type: PavloviaProject self.noTitle = noTitle self.localFolder = '' self.syncPanel = None if not noTitle: self.title = wx.StaticText(parent=self, id=-1, label="", style=wx.ALIGN_CENTER) font = wx.Font(18, wx.DECORATIVE, wx.NORMAL, wx.BOLD) self.title.SetFont(font) # if we've synced before we should know the local location self.localFolderCtrl = wx.StaticText(parent=self, id=wx.ID_ANY, label=_translate("Local root: ")) self.browseLocalBtn = wx.Button(parent=self, id=wx.ID_ANY, label=_translate("Browse...")) self.browseLocalBtn.Bind(wx.EVT_BUTTON, self.onBrowseLocalFolder) # remote attributes self.url = wxhl.HyperLinkCtrl( parent=self, id=-1, label="https://pavlovia.org", URL="https://pavlovia.org", ) self.description = wx.StaticText( parent=self, id=-1, label=_translate("Select a project for details")) self.tags = wx.StaticText(parent=self, id=-1, label="") self.visibility = wx.StaticText(parent=self, id=-1, label="") self.syncButton = wx.Button(self, -1, _translate("Sync...")) self.syncButton.Enable(False) self.syncButton.Bind(wx.EVT_BUTTON, self.onSyncButton) self.syncPanel = sync.SyncStatusPanel(parent=self, id=wx.ID_ANY) # layout # sizers: on the right we have detail self.sizer = wx.BoxSizer(wx.VERTICAL) # self.sizer.Add(wx.StaticText(self, -1, _translate("Project Info")), # flag=wx.ALL, # border=5) if not noTitle: self.sizer.Add(self.title, border=5, flag=wx.ALL | wx.ALIGN_CENTER) self.sizer.Add(self.url, border=5, flag=wx.ALL | wx.ALIGN_CENTER) self.sizer.Add(self.localFolderCtrl, border=5, flag=wx.ALL | wx.EXPAND), self.sizer.Add(self.browseLocalBtn, border=5, flag=wx.ALL | wx.ALIGN_LEFT) self.sizer.Add(self.tags, border=5, flag=wx.ALL | wx.EXPAND) self.sizer.Add(self.visibility, border=5, flag=wx.ALL | wx.EXPAND) self.sizer.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), flag=wx.ALL | wx.EXPAND) self.sizer.Add(self.description, border=10, flag=wx.ALL | wx.EXPAND) self.sizer.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), flag=wx.ALL | wx.EXPAND) self.sizer.Add(self.syncButton, flag=wx.ALL | wx.ALIGN_RIGHT, border=5) self.sizer.Add(self.syncPanel, border=5, proportion=1, flag=wx.ALL | wx.RIGHT | wx.EXPAND) if self.project: self.setProject(self.project) self.syncPanel.setStatus(_translate("Ready to sync")) else: self.syncPanel.setStatus( _translate("This file doesn't belong to a project yet")) self.SetAutoLayout(True) self.SetSizerAndFit(self.sizer) self.SetupScrolling() self.Bind(wx.EVT_SIZE, self.onResize)