oops: fixed git reset usage
[ugit.git] / ugit / qtutils.py
blob0ee407f7458be4b26bdae0d49eb4a4539947f00c
1 import os
2 from PyQt4 import QtCore
3 from PyQt4 import QtGui
4 from PyQt4.QtGui import QClipboard
5 from PyQt4.QtGui import QFileDialog
6 from PyQt4.QtGui import QIcon
7 from PyQt4.QtGui import QListWidgetItem
8 from PyQt4.QtGui import QMessageBox
10 from ugit import utils
12 LOGGER = None
14 def log(output, quiet=True, doraise=False):
15 if not LOGGER: return
16 LOGGER.log(output)
17 if quiet: return
18 LOGGER.show()
19 if not doraise: return
20 LOGGER.raise_()
22 def input(msg, title=None):
23 if title is None:
24 title = msg
25 parent = QtGui.qApp.activeWindow()
26 result = QtGui.QInputDialog.getText(parent, msg, title)
27 return (unicode(result[0]), result[1])
29 def close_log_window():
30 LOGGER.hide()
31 LOGGER.done(0)
33 def show_output(output):
34 if not output: return
35 log(output, quiet=False)
37 def toggle_log_window():
38 if not LOGGER: return
39 if LOGGER.isVisible():
40 LOGGER.hide()
41 else:
42 LOGGER.show()
43 LOGGER.raise_()
45 def create_listwidget_item(text, filename):
46 icon = QIcon(filename)
47 item = QListWidgetItem()
48 item.setIcon(icon)
49 item.setText(text)
50 return item
52 def information(parent, title, message):
53 '''Launches a QMessageBox information with the
54 provided title and message.'''
55 QMessageBox.information(parent, title, message)
57 def get_selected_row(list_widget):
58 '''Returns a(row_number, is_selected) tuple for a QListWidget.'''
59 row = list_widget.currentRow()
60 item = list_widget.item(row)
61 selected = item is not None and item.isSelected()
62 return(row, selected)
64 def get_selection_list(listwidget, items):
65 '''Returns an array of model items that correspond to
66 the selected QListWidget indices.'''
67 selected = []
68 itemcount = listwidget.count()
69 widgetitems = [ listwidget.item(idx) for idx in range(itemcount) ]
71 for item, widgetitem in zip(items, widgetitems):
72 if widgetitem.isSelected():
73 selected.append(item)
74 return selected
76 def get_selected_item(list_widget, items):
77 row, selected = get_selected_row(list_widget)
78 if selected and row < len(items):
79 return items[row]
80 else:
81 return None
83 def open_dialog(parent, title, filename=None):
84 qstr = QFileDialog.getOpenFileName(
85 parent, parent.tr(title), filename)
86 return unicode(qstr)
88 def save_dialog(parent, title, filename=None):
89 qstr = QFileDialog.getSaveFileName(
90 parent, parent.tr(title), filename)
91 return unicode(qstr)
93 def dir_dialog(parent, title, directory):
94 directory = QFileDialog.getExistingDirectory(
95 parent, title, directory)
96 return unicode(directory)
98 def get_qicon(filename):
99 icon = utils.get_icon(filename)
100 return QIcon(icon)
102 def question(parent, title, message, default=True):
103 '''Launches a QMessageBox question with the provided title and message.
104 Passing "default=False" will make "No" the default choice.'''
105 yes = QMessageBox.Yes
106 no = QMessageBox.No
107 buttons = yes | no
108 if default:
109 default = yes
110 else:
111 default = no
112 result = QMessageBox.question(parent,
113 title, message, buttons, default)
114 return result == QMessageBox.Yes
116 def set_clipboard(text):
117 QtGui.qApp.clipboard().setText(text, QClipboard.Clipboard)
118 QtGui.qApp.clipboard().setText(text, QClipboard.Selection)
120 def add_items(widget, items):
121 for item in items: widget.addItem(item)
123 def set_items(widget, items):
124 widget.clear()
125 add_items(widget, items)
127 def tr(txt):
128 trtext = unicode(QtGui.qApp.tr(txt))
129 if trtext.endswith('@@verb'):
130 trtext = trtext.replace('@@verb','')
131 if trtext.endswith('@@noun'):
132 trtext = trtext.replace('@@noun','')
133 return trtext
135 def create_item(filename, staged, untracked=False):
136 '''Given a filename, return a QListWidgetItem suitable
137 for adding to a QListWidget. "staged" and "untracked"
138 controls whether to use the appropriate icons.'''
139 if staged:
140 if os.path.exists(filename):
141 icon_file = utils.get_icon('staged.png')
142 else:
143 icon_file = utils.get_icon('removed.png')
144 elif untracked:
145 icon_file = utils.get_icon('untracked.png')
146 else:
147 icon_file = utils.get_file_icon(filename)
148 return create_listwidget_item(filename, icon_file)
150 def create_txt_item(txt):
151 item = QListWidgetItem()
152 item.setText(txt)
153 return item
155 def update_listwidget(widget, items, staged=True,
156 untracked=False, append=False):
157 '''Populate a QListWidget with custom icon items.'''
158 if not append: widget.clear()
159 add_items( widget, [ create_item(i, staged, untracked) for i in items ])
161 def set_listwidget_strings(widget, items):
162 widget.clear()
163 add_items( widget, [ create_txt_item(i) for i in items ])