Added interactive font selection and update
[ugit.git] / ugitlibs / pushcontroller.py
blob366416d48037ee525be6db7e626bf08c0cf382a3
1 import os
2 from PyQt4.QtGui import QDialog
4 import utils
5 import qtutils
6 from qobserver import QObserver
7 from views import PushGUI
9 def push_branches(model, parent):
10 model = model.clone(init=False)
11 view = PushGUI(parent)
12 controller = PushController(model,view)
13 view.show()
14 return view.exec_() == QDialog.Accepted
16 class PushController(QObserver):
17 def __init__(self, model, view):
18 QObserver.__init__(self,model,view)
20 self.model_to_view('remote', 'remoteText')
21 self.model_to_view('remotes', 'remoteList')
22 self.model_to_view('local_branch', 'localBranchText')
23 self.model_to_view('local_branches', 'localBranchList')
24 self.model_to_view('remote_branch', 'remoteBranchText')
25 self.model_to_view('remote_branches', 'remoteBranchList')
27 self.add_actions('remotes', self.remotes)
29 self.add_signals('textChanged(const QString&)',
30 view.remoteText,
31 view.localBranchText,
32 view.remoteBranchText)
33 self.add_signals('itemClicked(QListWidgetItem *)',
34 view.remoteList,
35 view.localBranchList,
36 view.remoteBranchList)
37 self.add_signals('itemSelectionChanged()',
38 view.remoteList,
39 view.localBranchList,
40 view.remoteBranchList)
41 self.add_signals('released()',
42 view.pushButton,
43 view.cancelButton)
45 self.add_callbacks(
46 remoteList = self.remote_list,
47 localBranchList = self.local_branch_list,
48 remoteBranchList = self.remote_branch_list,
49 pushButton = self.push,
52 self.connect(view.cancelButton, 'released()', view.reject)
53 model.notify_observers(
54 'remotes','local_branches','remote_branches')
56 def push(self):
57 if not self.model.get_remote():
58 errmsg = self.tr('No repository selected.')
59 qtutils.show_output(self.view, errmsg)
60 return
62 if not self.model.get_remote_branch():
63 errmsg = self.tr('Please supply a branch name.')
64 qtutils.show_output(self.view, errmsg)
65 return
67 if not self.model.get_local_branch():
68 msg = self.tr('Pushing with an empty local branch '
69 + 'will remove the remote branch.\n'
70 + 'Continue?')
71 if not qtutils.question(self.view, self.tr('warning'), msg):
72 return
74 remote = self.model.get_remote()
75 local_branch = self.model.get_local_branch()
76 remote_branch = self.model.get_remote_branch()
77 ffwd = self.view.allowFFOnlyCheckBox.isChecked()
78 tags = self.view.tagsCheckBox.isChecked()
80 status, output = self.model.push(remote,
81 local_branch, remote_branch,
82 ffwd=ffwd, tags=tags)
84 qtutils.show_output(self.view, output)
85 if not status:
86 self.view.accept()
88 def remotes(self, widget):
89 displayed = []
90 for remote in self.model.get_remotes():
91 url = self.model.remote_url(remote)
92 display = '%s\t(%s %s)' \
93 % (remote, unicode(self.tr('URL:')), url)
94 displayed.append(display)
95 qtutils.set_items(widget,displayed)
97 def remote_list(self,*rest):
98 widget = self.view.remoteList
99 remotes = self.model.get_remotes()
100 selection = qtutils.get_selected_item(widget,remotes)
101 if not selection: return
102 self.model.set_remote(selection)
103 self.view.remoteText.selectAll()
105 def local_branch_list(self,*rest):
106 branches = self.model.get_local_branches()
107 widget = self.view.localBranchList
108 selection = qtutils.get_selected_item(widget,branches)
109 if not selection: return
111 self.model.set_local_branch(selection)
112 self.model.set_remote_branch(selection)
114 self.view.localBranchText.selectAll()
115 self.view.remoteBranchText.selectAll()
117 def remote_branch_list(self,*rest):
118 widget = self.view.remoteBranchList
119 branches = self.model.get_remote_branches()
120 selection = qtutils.get_selected_item(widget,branches)
121 if not selection: return
123 branch = utils.basename(selection)
124 self.model.set_remote_branch(branch)
125 self.view.remoteBranchText.selectAll()