classic: Use a QWidget for proper window management
[git-cola.git] / cola / bookmarks.py
blob526118bcb2971b875791935387859d9a16e32dd2
1 """Provides BookmarksDialog."""
2 import os
3 import sys
5 from PyQt4 import QtGui
6 from PyQt4 import QtCore
7 from PyQt4.QtCore import SIGNAL
9 from cola import core
10 from cola import qtutils
11 from cola import settings
12 from cola import utils
13 from cola.widgets import defs
14 from cola.widgets import standard
17 def manage_bookmarks():
18 dlg = BookmarksDialog(qtutils.active_window())
19 dlg.show()
20 dlg.exec_()
21 return dlg
24 class BookmarksDialog(standard.Dialog):
25 def __init__(self, parent):
26 standard.Dialog.__init__(self, parent)
27 self.model = settings.Settings()
29 self.resize(494, 238)
30 self.setWindowTitle(self.tr('Bookmarks'))
31 self.setWindowModality(QtCore.Qt.WindowModal)
32 self.layt = QtGui.QVBoxLayout(self)
33 self.layt.setMargin(defs.margin)
34 self.layt.setSpacing(defs.spacing)
36 self.bookmarks = QtGui.QListWidget(self)
37 self.bookmarks.setAlternatingRowColors(True)
38 self.bookmarks.setSelectionMode(QtGui.QAbstractItemView
39 .ExtendedSelection)
41 self.layt.addWidget(self.bookmarks)
42 self.button_layout = QtGui.QHBoxLayout()
44 self.open_button = QtGui.QPushButton(self)
45 self.open_button.setText(self.tr('Open'))
46 self.open_button.setIcon(qtutils.open_icon())
47 self.button_layout.addWidget(self.open_button)
49 self.add_button = QtGui.QPushButton(self)
50 self.add_button.setText(self.tr('Add'))
51 self.add_button.setIcon(qtutils.icon('add.svg'))
52 self.button_layout.addWidget(self.add_button)
54 self.delete_button = QtGui.QPushButton(self)
55 self.delete_button.setText(self.tr('Delete'))
56 self.delete_button.setIcon(qtutils.discard_icon())
57 self.delete_button.setEnabled(False)
58 self.button_layout.addWidget(self.delete_button)
59 self.button_layout.addStretch()
61 self.save_button = QtGui.QPushButton(self)
62 self.save_button.setText(self.tr('Save'))
63 self.save_button.setIcon(qtutils.save_icon())
64 self.save_button.setEnabled(False)
65 self.button_layout.addWidget(self.save_button)
67 self.close_button = QtGui.QPushButton(self)
68 self.close_button.setText(self.tr('Close'))
69 self.button_layout.addWidget(self.close_button)
71 self.layt.addLayout(self.button_layout)
73 self.connect(self.open_button, SIGNAL('clicked()'), self.open_repo)
74 self.connect(self.add_button, SIGNAL('clicked()'), self.add)
75 self.connect(self.delete_button, SIGNAL('clicked()'), self.delete)
76 self.connect(self.save_button, SIGNAL('clicked()'), self.save)
77 self.connect(self.close_button, SIGNAL('clicked()'), self.accept)
78 self.connect(self.bookmarks, SIGNAL('itemSelectionChanged()'),
79 self.item_selection_changed)
81 self.update_bookmarks()
83 def update_bookmarks(self):
84 self.bookmarks.clear()
85 self.bookmarks.addItems(self.model.bookmarks)
87 def selection(self):
88 return qtutils.selection_list(self.bookmarks, self.model.bookmarks)
90 def item_selection_changed(self):
91 has_selection = bool(self.selection())
92 self.delete_button.setEnabled(has_selection)
94 def save(self):
95 """Saves the bookmarks settings and exits"""
96 self.model.save()
97 qtutils.information("Bookmarks Saved")
98 self.save_button.setEnabled(False)
100 def add(self):
101 path, ok = qtutils.prompt('Path to git repository:',
102 title='Enter Git Repository',
103 text=core.decode(os.getcwd()))
104 if not ok:
105 return
106 self.model.bookmarks.append(path)
107 self.update_bookmarks()
108 self.save()
110 def open_repo(self):
111 """Opens a new git-cola session on a bookmark"""
112 for repo in self.selection():
113 utils.fork([sys.executable, sys.argv[0], '--repo', repo])
115 def delete(self):
116 """Removes a bookmark from the bookmarks list"""
117 selection = self.selection()
118 if not selection:
119 return
120 for repo in selection:
121 self.model.remove_bookmark(repo)
122 self.update_bookmarks()
123 self.save_button.setEnabled(True)