configure: match git's shell script style
[ugit.git] / ugitlibs / views.py
blobe13652d332b8b9204e4f4a79c4f909472ec37b61
1 import os
2 import time
3 from PyQt4.QtCore import Qt
4 from PyQt4.QtGui import QDialog
5 from PyQt4.QtGui import QMainWindow
6 from PyQt4.QtGui import QCheckBox
7 from maingui import Ui_maingui
8 from outputgui import Ui_outputgui
9 from optionsgui import Ui_optionsgui
10 from branchgui import Ui_branchgui
11 from commitgui import Ui_commitgui
12 from createbranchgui import Ui_createbranchgui
13 from pushgui import Ui_pushgui
14 from syntax import DiffSyntaxHighlighter
15 from syntax import LogSyntaxHighlighter
16 import qtutils
18 class View(Ui_maingui, QMainWindow):
19 '''The main ugit interface.'''
20 def __init__(self, parent=None):
21 QMainWindow.__init__(self, parent)
22 Ui_maingui.__init__(self)
23 self.setupUi(self)
24 self.staged.setAlternatingRowColors(True)
25 self.unstaged.setAlternatingRowColors(True)
26 self.set_display = self.display_text.setText
27 self.set_info = self.displayLabel.setText
28 self.action_undo = self.commitmsg.undo
29 self.action_redo = self.commitmsg.redo
30 self.action_paste = self.commitmsg.paste
31 self.action_select_all = self.commitmsg.selectAll
32 # Qt does not support noun/verbs
33 self.commit_button.setText(qtutils.tr('Commit@@verb'))
34 self.commit_menu.setTitle(qtutils.tr('Commit@@verb'))
35 # Default to creating a new commit(i.e. not an amend commit)
36 self.new_commit_radio.setChecked(True)
37 self.toolbar_show_log = self.toolbar.addAction(
38 qtutils.get_qicon('git.png'),
39 'Show/Hide Log Window')
40 self.toolbar_show_log.setEnabled(True)
41 self.addToolBar(Qt.BottomToolBarArea, self.toolbar)
43 checkbox = QCheckBox(self)
44 checkbox.setText(self.tr("Horizontal Status"))
45 self.action_vertical = self.toolbar.addWidget(checkbox)
46 self.horizontal_checkbox = checkbox
48 # Diff/patch syntax highlighter
49 DiffSyntaxHighlighter(self.display_text.document())
51 def action_cut(self):
52 self.action_copy()
53 self.action_delete()
54 def action_copy(self):
55 cursor = self.commitmsg.textCursor()
56 selection = cursor.selection().toPlainText()
57 qtutils.set_clipboard(selection)
58 def action_delete(self):
59 self.commitmsg.textCursor().removeSelectedText()
60 def reset_display(self):
61 self.set_display('')
62 self.set_info('')
63 def copy_display(self):
64 cursor = self.display_text.textCursor()
65 selection = cursor.selection().toPlainText()
66 qtutils.set_clipboard(selection)
67 def diff_selection(self):
68 cursor = self.display_text.textCursor()
69 offset = cursor.position()
70 selection = cursor.selection().toPlainText()
71 num_selected_lines = selection.count('\n')
72 return offset, selection
74 class OutputGUI(Ui_outputgui, QDialog):
75 '''A simple dialog to display command output.'''
76 def __init__(self, parent=None, output=None):
77 QDialog.__init__(self, parent)
78 Ui_outputgui.__init__(self)
79 self.setupUi(self)
80 self.setWindowTitle(self.tr('Git Command Output'))
81 # Syntax highlight the log window
82 LogSyntaxHighlighter(self.output_text.document())
83 if output: self.set_output(output)
84 def clear(self):
85 self.output_text.clear()
86 def set_output(self, output):
87 self.output_text.setText(output)
88 def log(self, output):
89 if not output: return
90 cursor = self.output_text.textCursor()
91 cursor.movePosition(cursor.End)
92 text = self.output_text
93 cursor.insertText(time.asctime() + '\n')
94 for line in unicode(output).splitlines():
95 cursor.insertText(line + '\n')
96 cursor.insertText('\n')
97 cursor.movePosition(cursor.End)
98 text.setTextCursor(cursor)
100 class BranchGUI(Ui_branchgui, QDialog):
101 '''A dialog for choosing branches.'''
102 def __init__(self, parent=None, branches=None):
103 QDialog.__init__(self, parent)
104 Ui_branchgui.__init__(self)
105 self.setupUi(self)
106 self.reset()
107 if branches: self.add(branches)
108 def reset(self):
109 self.branches = []
110 self.branch_combo.clear()
111 def add(self, branches):
112 for branch in branches:
113 self.branches.append(branch)
114 self.branch_combo.addItem(branch)
115 def get_selected(self):
116 self.show()
117 if self.exec_() == QDialog.Accepted:
118 return self.branches[self.branch_combo.currentIndex()]
119 else:
120 return None
122 class CommitGUI(Ui_commitgui, QDialog):
123 def __init__(self, parent=None, title=None):
124 QDialog.__init__(self, parent)
125 Ui_commitgui.__init__(self)
126 self.setupUi(self)
127 if title: self.setWindowTitle(title)
128 # Make the list widget slighty larger
129 self.splitter.setSizes([ 50, 200 ])
130 DiffSyntaxHighlighter(self.commit_text.document(),
131 whitespace=False)
133 class CreateBranchGUI(Ui_createbranchgui, QDialog):
134 def __init__(self, parent=None):
135 QDialog.__init__(self, parent)
136 Ui_createbranchgui.__init__(self)
137 self.setupUi(self)
139 class PushGUI(Ui_pushgui, QDialog):
140 def __init__(self, parent=None):
141 QDialog.__init__(self, parent)
142 Ui_pushgui.__init__(self)
143 self.setupUi(self)
145 class OptionsGUI(Ui_optionsgui, QDialog):
146 def __init__(self, parent=None):
147 QDialog.__init__(self, parent)
148 Ui_optionsgui.__init__(self)
149 self.setupUi(self)