Simplified controllers by using qtutils.set_items/add_items
[ugit.git] / ugitlibs / pushcontroller.py
blob1c667f52c7118cb9892b3e72ba350ba23a59bb7a
1 import os
3 from qobserver import QObserver
4 import cmds
5 import utils
6 import qtutils
8 class GitPushController(QObserver):
9 def __init__(self, model, view):
10 QObserver.__init__(self,model,view)
12 self.model_to_view('remote', 'remoteText')
13 self.model_to_view('remotes', 'remoteList')
14 self.model_to_view('local_branch', 'localBranchText')
15 self.model_to_view('remote_branch', 'remoteBranchText')
16 self.model_to_view('local_branches', 'localBranchList')
17 self.model_to_view('remote_branches', 'remoteBranchList')
19 self.add_signals('textChanged(const QString&)',
20 view.remoteText,
21 view.localBranchText,
22 view.remoteBranchText)
24 self.add_signals('itemSelectionChanged()',
25 view.remoteList,
26 view.localBranchList,
27 view.remoteBranchList)
29 self.add_signals('released()',
30 view.pushButton,
31 view.cancelButton)
33 self.add_actions('remotes', self.remotes)
35 self.add_callbacks({
36 'remoteList': self.remote_list,
37 'localBranchList': self.local_branch_list,
38 'remoteBranchList': self.remote_branch_list,
39 'pushButton': self.push,
42 self.connect(view.cancelButton, 'released()', view.reject)
44 model.init_branch_data()
46 def push(self):
47 if not self.model.get_remote():
48 errmsg = self.tr('No repository selected.')
49 qtutils.show_command(self.view, errmsg)
50 return
52 if not self.model.get_remote_branch():
53 errmsg = self.tr('Please supply a branch name.')
54 qtutils.show_command(self.view, errmsg)
55 return
57 if not self.model.get_local_branch():
58 msg = self.tr('Pushing with an empty local branch '
59 + 'will remove the remote branch.\n'
60 + 'Continue?')
61 if not qtutils.question(self.view, self.tr('warning'), msg):
62 return
64 remote = self.model.get_remote()
65 local_branch = self.model.get_local_branch()
66 remote_branch = self.model.get_remote_branch()
67 ffwd = self.view.allowFFOnlyCheckBox.isChecked()
68 tags = self.view.tagsCheckBox.isChecked()
70 status, output = cmds.git_push(remote,
71 local_branch, remote_branch,
72 ffwd=ffwd, tags=tags)
74 qtutils.show_command(self.view, output)
75 if not status:
76 self.view.accept()
78 def remotes(self, widget):
79 displayed = []
80 for remote in self.model.get_remotes():
81 url = cmds.git_remote_url(remote)
82 display = '%s\t(%s %s)' \
83 % (remote, unicode(self.tr('URL:')), url)
84 displayed.append(display)
85 qtutils.set_items(widget,displayed)
87 def remote_list(self):
88 widget = self.view.remoteList
89 remotes = self.model.get_remotes()
90 selection = qtutils.get_selected_item(widget,remotes)
91 if not selection: return
92 self.model.set_remote(selection)
93 self.view.remoteText.selectAll()
95 def local_branch_list(self):
96 branches = self.model.get_local_branches()
97 widget = self.view.localBranchList
98 selection = qtutils.get_selected_item(widget,branches)
99 if not selection: return
101 self.model.set_local_branch(selection)
102 self.model.set_remote_branch(selection)
104 self.view.localBranchText.selectAll()
105 self.view.remoteBranchText.selectAll()
107 def remote_branch_list(self):
108 widget = self.view.remoteBranchList
109 branches = self.model.get_remote_branches()
110 selection = qtutils.get_selected_item(widget,branches)
111 if not selection: return
113 branch = utils.basename(selection)
114 self.model.set_remote_branch(branch)
115 self.view.remoteBranchText.selectAll()