Changeset 8f2f1ab727fc…
Parent 95146b968419…
by
Changes to 2 files · Browse files at 8f2f1ab727fc Showing diff from parent 95146b968419 Diff from another changeset...
|
|
@@ -24,14 +24,14 @@ class RepoTreeView(QTreeView):
showMessage = pyqtSignal(QString)
openRepo = pyqtSignal(QString, bool)
-
- contextmenu = None
+ menuRequested = pyqtSignal(object, object)
def __init__(self, parent):
QTreeView.__init__(self, parent, allColumnsShowFocus=True)
self.selitem = None
- self.msg = ''
+ self.msg = ''
+ self.setHeaderHidden(True)
self.setExpandsOnDoubleClick(False)
self.setMouseTracking(True)
@@ -45,24 +45,10 @@ self.setEditTriggers(QAbstractItemView.DoubleClicked)
self.setSelectionBehavior(QAbstractItemView.SelectRows)
- self.createActions()
- self.setHeaderHidden(True)
-
def contextMenuEvent(self, event):
if not self.selitem:
return
- menulist = self.selitem.internalPointer().menulist()
- if len(menulist) > 0:
- if not self.contextmenu:
- self.contextmenu = QMenu(self)
- else:
- self.contextmenu.clear()
- for act in menulist:
- if act:
- self.contextmenu.addAction(self._actions[act])
- else:
- self.contextmenu.addSeparator()
- self.contextmenu.exec_(event.globalPos())
+ self.menuRequested.emit(event.globalPos(), self.selitem)
def mouseMoveEvent(self, event):
self.msg = ''
@@ -76,7 +62,8 @@
def keyPressEvent(self, event):
if event.key() in (Qt.Key_Enter, Qt.Key_Return):
- self.showFirstTabOrOpen()
+ if self.selitem and self.selitem.internalPointer().details():
+ self.showFirstTabOrOpen()
else:
super(RepoTreeView, self).keyPressEvent(event)
@@ -97,76 +84,10 @@ else:
self.selitem = selection[0]
- def _action_defs(self):
- a = [("open", _("Open"), 'thg-repository-open',
- _("Open the repository in a new tab"), None, self.open),
- ("openAll", _("Open All"), 'thg-repository-open',
- _("Open all repositories in new tabs"), None, self.openAll),
- ("newGroup", _("New Group"), 'new-group',
- _("Create a new group"), None, self.newGroup),
- ("rename", _("Rename"), None,
- _("Rename the entry"), None, self.startRename),
- ("settings", _("Settings..."), 'settings_user',
- _("View the repository's settings"), None, self.startSettings),
- ("remove", _("Remove from registry"), 'menudelete',
- _("Remove the node and all its subnodes."
- " Repositories are not deleted from disk."),
- None, self.removeSelected),
- ("clone", _("Clone..."), 'hg-clone',
- _("Clone Repository"), None, self.cloneRepo),
- ("explore", _("Explore"), 'system-file-manager',
- _("Open the repository in Windows Explorer"), None, self.explore),
- ("terminal", _("Terminal"), 'utilities-terminal',
- _("Open a shell terminal in repository root"), None, self.terminal),
- ("add", _("Add repository..."), 'hg',
- _("Add a repository to this group"), None, self.addRepo),
- ]
- return a
-
- def createActions(self):
- self._actions = {}
- for name, desc, icon, tip, key, cb in self._action_defs():
- self._actions[name] = QAction(desc, self)
- QTimer.singleShot(0, self.configureActions)
-
- def configureActions(self):
- for name, desc, icon, tip, key, cb in self._action_defs():
- act = self._actions[name]
- if icon:
- act.setIcon(qtlib.getmenuicon(icon))
- if tip:
- act.setStatusTip(tip)
- if key:
- act.setShortcut(key)
- if cb:
- act.triggered.connect(cb)
- self.addAction(act)
-
- def startSettings(self):
- if not self.selitem:
- return
- root = self.selitem.internalPointer().rootpath()
- sd = settings.SettingsDialog(configrepo=True, focus='web.name',
- parent=self, root=root)
- sd.exec_()
-
- def startRename(self):
- if not self.selitem:
- return
- self.edit(self.selitem)
-
- def openAll(self):
- if not self.selitem:
- return
- for root in self.selitem.internalPointer().childRoots():
- self.openRepo.emit(hglib.tounicode(root), False)
-
- def open(self):
- 'open context menu action, open repowidget unconditionally'
- if not self.selitem:
- return
- root = self.selitem.internalPointer().rootpath()
- self.openRepo.emit(hglib.tounicode(root), False)
+ def sizeHint(self):
+ size = super(RepoTreeView, self).sizeHint()
+ size.setWidth(QFontMetrics(self.font()).width('M') * 15)
+ return size
def showFirstTabOrOpen(self):
'Enter or double click events, show existing or open a new repowidget'
@@ -175,30 +96,124 @@ root = self.selitem.internalPointer().rootpath()
self.openRepo.emit(hglib.tounicode(root), True)
- def newGroup(self):
- m = self.model()
- m.addGroup(_('New Group'))
- def removeSelected(self):
- if not self.selitem:
+class RepoRegistryView(QDockWidget):
+
+ showMessage = pyqtSignal(QString)
+ openRepo = pyqtSignal(QString, bool)
+
+ def __init__(self, parent):
+ QDockWidget.__init__(self, parent)
+
+ self.setFeatures(QDockWidget.DockWidgetClosable |
+ QDockWidget.DockWidgetMovable |
+ QDockWidget.DockWidgetFloatable)
+ self.setWindowTitle(_('Repository Registry'))
+
+ mainframe = QFrame()
+ mainframe.setLayout(QVBoxLayout())
+ self.setWidget(mainframe)
+ mainframe.layout().setContentsMargins(0, 0, 0, 0)
+
+ self.contextmenu = QMenu(self)
+ self.tview = tv = RepoTreeView(self)
+ tv.setModel(repotreemodel.RepoTreeModel(settingsfilename(), self))
+ mainframe.layout().addWidget(tv)
+
+ tv.setIndentation(10)
+ tv.setFirstColumnSpanned(0, QModelIndex(), True)
+ tv.setColumnHidden(1, True)
+
+ tv.showMessage.connect(self.showMessage)
+ tv.openRepo.connect(self.openRepo)
+ tv.menuRequested.connect(self.onMenuRequest)
+
+ self.createActions()
+ QTimer.singleShot(0, self.expand)
+
+ def expand(self):
+ self.tview.expandToDepth(0)
+
+ def addRepo(self, repo):
+ 'workbench has opened a new repowidget, ensure its in the registry'
+ m = self.tview.model()
+ it = m.getRepoItem(repo.root)
+ if it == None:
+ m.addRepo(None, repo)
+ else:
+ # ensure the registry item has a thgrepo instance
+ it.ensureRepoLoaded()
+
+ def showPaths(self, show):
+ self.tview.setColumnHidden(1, not show)
+ if show:
+ self.tview.resizeColumnToContents(0)
+ self.tview.resizeColumnToContents(1)
+
+ def close(self):
+ self.tview.model().write(settingsfilename())
+
+ def _action_defs(self):
+ a = [("open", _("Open"), 'thg-repository-open',
+ _("Open the repository in a new tab"), self.open),
+ ("openAll", _("Open All"), 'thg-repository-open',
+ _("Open all repositories in new tabs"), self.openAll),
+ ("newGroup", _("New Group"), 'new-group',
+ _("Create a new group"), self.newGroup),
+ ("rename", _("Rename"), None,
+ _("Rename the entry"), self.startRename),
+ ("settings", _("Settings..."), 'settings_user',
+ _("View the repository's settings"), self.startSettings),
+ ("remove", _("Remove from registry"), 'menudelete',
+ _("Remove the node and all its subnodes."
+ " Repositories are not deleted from disk."),
+ self.removeSelected),
+ ("clone", _("Clone..."), 'hg-clone',
+ _("Clone Repository"), self.cloneRepo),
+ ("explore", _("Explore"), 'system-file-manager',
+ _("Open the repository in Windows Explorer"), self.explore),
+ ("terminal", _("Terminal"), 'utilities-terminal',
+ _("Open a shell terminal in repository root"), self.terminal),
+ ("add", _("Add repository..."), 'hg',
+ _("Add a repository to this group"), self.addNewRepo),
+ ]
+ return a
+
+ def createActions(self):
+ self._actions = {}
+ for name, desc, icon, tip, cb in self._action_defs():
+ self._actions[name] = QAction(desc, self)
+ QTimer.singleShot(0, self.configureActions)
+
+ def configureActions(self):
+ for name, desc, icon, tip, cb in self._action_defs():
+ act = self._actions[name]
+ if icon:
+ act.setIcon(qtlib.getmenuicon(icon))
+ if tip:
+ act.setStatusTip(tip)
+ if cb:
+ act.triggered.connect(cb)
+ self.addAction(act)
+
+ def onMenuRequest(self, point, selitem):
+ menulist = selitem.internalPointer().menulist()
+ if not menulist:
return
- s = self.selitem
- if not s.internalPointer().okToDelete(self):
- labels = [(QMessageBox.Yes, _('&Delete')),
- (QMessageBox.No, _('Cancel'))]
- if not qtlib.QuestionMsgBox(_('Confirm Delete'),
- _("Delete Group '%s' and all its entries?")%
- self.name, labels=labels, parent=self):
- return
- m = self.model()
- row = s.row()
- parent = s.parent()
- m.removeRows(row, 1, parent)
- self.selectionChanged(None, None)
+ self.contextmenu.clear()
+ for act in menulist:
+ if act:
+ self.contextmenu.addAction(self._actions[act])
+ else:
+ self.contextmenu.addSeparator()
+ self.selitem = selitem
+ self.contextmenu.exec_(point)
+
+ #
+ ## Menu action handlers
+ #
def cloneRepo(self):
- if not self.selitem:
- return
root = self.selitem.internalPointer().rootpath()
d = clone.CloneDialog(args=[root, root + '-clone'], parent=self)
d.finished.connect(d.deleteLater)
@@ -206,21 +221,15 @@ d.show()
def explore(self):
- if not self.selitem:
- return
root = self.selitem.internalPointer().rootpath()
QDesktopServices.openUrl(QUrl.fromLocalFile(root))
def terminal(self):
- if not self.selitem:
- return
root = self.selitem.internalPointer().rootpath()
qtlib.openshell(root)
- def addRepo(self):
+ def addNewRepo(self):
'menu action handler for adding a new repository'
- if not self.selitem:
- return
caption = _('Select repository directory to add')
FD = QFileDialog
path = FD.getExistingDirectory(caption=caption,
@@ -239,64 +248,39 @@ _('%s is not a valid repository') % path)
return
- def sizeHint(self):
- size = super(RepoTreeView, self).sizeHint()
- size.setWidth(QFontMetrics(self.font()).width('M') * 15)
- return size
+ def startSettings(self):
+ root = self.selitem.internalPointer().rootpath()
+ sd = settings.SettingsDialog(configrepo=True, focus='web.name',
+ parent=self, root=root)
+ sd.exec_()
-class RepoRegistryView(QDockWidget):
+ def openAll(self):
+ for root in self.selitem.internalPointer().childRoots():
+ self.openRepo.emit(hglib.tounicode(root), False)
- showMessage = pyqtSignal(QString)
- openRepoSignal = pyqtSignal(QString, bool)
+ def open(self):
+ 'open context menu action, open repowidget unconditionally'
+ root = self.selitem.internalPointer().rootpath()
+ self.openRepo.emit(hglib.tounicode(root), False)
- def __init__(self, parent):
- QDockWidget.__init__(self, parent)
+ def startRename(self):
+ self.tview.edit(self.selitem)
- self.setFeatures(QDockWidget.DockWidgetClosable |
- QDockWidget.DockWidgetMovable |
- QDockWidget.DockWidgetFloatable)
- self.setWindowTitle(_('Repository Registry'))
+ def newGroup(self):
+ self.tview.model().addGroup(_('New Group'))
- mainframe = QFrame()
- lay = QVBoxLayout()
- lay.setContentsMargins(0, 0, 0, 0)
- mainframe.setLayout(lay)
- self.setWidget(mainframe)
+ def removeSelected(self):
+ s = self.selitem
+ if not s.internalPointer().okToDelete():
+ labels = [(QMessageBox.Yes, _('&Delete')),
+ (QMessageBox.No, _('Cancel'))]
+ if not qtlib.QuestionMsgBox(_('Confirm Delete'),
+ _("Delete Group '%s' and all its entries?")%
+ self.name, labels=labels, parent=self):
+ return
+ m = self.tview.model()
+ row = s.row()
+ parent = s.parent()
+ m.removeRows(row, 1, parent)
+ self.tview.selectionChanged(None, None)
- self.tmodel = m = repotreemodel.RepoTreeModel(settingsfilename(), self)
- self.tview = tv = RepoTreeView(self)
- tv.setModel(m)
- lay.addWidget(tv)
-
- tv.setIndentation(10)
- tv.setFirstColumnSpanned(0, QModelIndex(), True)
- tv.openRepo.connect(self.openRepo)
- tv.showMessage.connect(self.showMessage)
-
- self.tview.setColumnHidden(1, True)
- QTimer.singleShot(0, self.expand)
-
- def expand(self):
- self.tview.expandToDepth(0)
-
- def addRepo(self, repo):
- 'workbench has opened a new repowidget, ensure its in the registry'
- m = self.tmodel
- it = m.getRepoItem(repo.root)
- if it == None:
- m.addRepo(None, repo)
- else:
- # ensure the registry item has a thgrepo instance
- it.ensureRepoLoaded()
-
- def openRepo(self, path, reuse=False):
- self.openRepoSignal.emit(path, reuse)
-
- def showPaths(self, show):
- self.tview.setColumnHidden(1, not show)
- if show:
- self.tview.resizeColumnToContents(0)
- self.tview.resizeColumnToContents(1)
-
- def close(self):
- self.tmodel.write(settingsfilename())
|
@@ -47,7 +47,7 @@ self.reporegistry = rr = RepoRegistryView(self)
rr.setObjectName('RepoRegistryView')
rr.showMessage.connect(self.showMessage)
- rr.openRepoSignal.connect(self.openRepo)
+ rr.openRepo.connect(self.openRepo)
rr.hide()
self.addDockWidget(Qt.LeftDockWidgetArea, rr)
|
Loading...