prefs: apply flake8 suggestions
[git-cola.git] / cola / widgets / startup.py
bloba01bcd7f28f44054eacd1a1f637e3b42c8e323b6
1 """Provides the git-cola startup dialog
3 The startup dialog is presented when no repositories can be
4 found at startup.
6 """
7 from __future__ import division, absolute_import, unicode_literals
9 from PyQt4 import QtGui
10 from PyQt4.QtCore import Qt
11 from PyQt4.QtCore import SIGNAL
13 from cola import core
14 from cola import guicmds
15 from cola import icons
16 from cola import qtutils
17 from cola.i18n import N_
18 from cola.settings import Settings
19 from cola.widgets import defs
20 from cola.widgets import standard
23 class StartupDialog(standard.Dialog):
24 """Provides a GUI to Open or Clone a git repository."""
26 def __init__(self, parent=None, settings=None):
27 standard.Dialog.__init__(self, parent, save_settings=True)
28 self.setWindowTitle(N_('git-cola'))
30 self.repodir = None
31 self.runtask = qtutils.RunTask(parent=self)
32 self.progress = standard.ProgressDialog('', '', self)
34 self.new_button = qtutils.create_button(text=N_('New...'),
35 icon=icons.new())
36 self.open_button = qtutils.create_button(text=N_('Open...'),
37 icon=icons.repo())
38 self.clone_button = qtutils.create_button(text=N_('Clone...'),
39 icon=icons.cola())
40 self.close_button = qtutils.close_button()
42 if settings is None:
43 settings = Settings()
44 settings.load()
45 self.settings = settings
47 self.bookmarks_label = QtGui.QLabel(N_('Select Repository...'))
48 self.bookmarks_label.setAlignment(Qt.AlignCenter)
50 self.bookmarks_model = QtGui.QStandardItemModel()
52 item = QtGui.QStandardItem(N_('Select manually...'))
53 item.setEditable(False)
54 self.bookmarks_model.appendRow(item)
56 added = set()
57 all_repos = settings.bookmarks + settings.recent
59 for repo in all_repos:
60 if repo in added:
61 continue
62 added.add(repo)
63 item = QtGui.QStandardItem(repo)
64 item.setEditable(False)
65 self.bookmarks_model.appendRow(item)
67 selection_mode = QtGui.QAbstractItemView.SingleSelection
69 self.bookmarks = QtGui.QListView()
70 self.bookmarks.setSelectionMode(selection_mode)
71 self.bookmarks.setAlternatingRowColors(True)
72 self.bookmarks.setModel(self.bookmarks_model)
74 if not all_repos:
75 self.bookmarks_label.setMinimumHeight(1)
76 self.bookmarks.setMinimumHeight(1)
77 self.bookmarks_label.hide()
78 self.bookmarks.hide()
80 self.button_layout = qtutils.hbox(defs.no_margin, defs.spacing,
81 self.open_button, self.clone_button,
82 self.new_button, qtutils.STRETCH,
83 self.close_button)
85 self.main_layout = qtutils.vbox(defs.margin, defs.spacing,
86 self.bookmarks_label, self.bookmarks,
87 self.button_layout)
88 self.setLayout(self.main_layout)
90 qtutils.connect_button(self.open_button, self.open_repo)
91 qtutils.connect_button(self.clone_button, self.clone_repo)
92 qtutils.connect_button(self.new_button, self.new_repo)
93 qtutils.connect_button(self.close_button, self.reject)
95 self.connect(self.bookmarks,
96 SIGNAL('activated(QModelIndex)'), self.open_bookmark)
98 if not self.restore_state(settings=settings):
99 screen = QtGui.QApplication.instance().desktop()
100 self.setGeometry(screen.width() // 4, screen.height() // 4,
101 screen.width() // 2, screen.height() // 2)
103 def find_git_repo(self):
105 Return a path to a git repository
107 This is the entry point for external callers.
108 This method finds a git repository by allowing the
109 user to browse to one on the filesystem or by creating
110 a new one with git-clone.
113 self.show()
114 self.raise_()
115 if self.exec_() == QtGui.QDialog.Accepted:
116 return self.repodir
117 return None
119 def open_repo(self):
120 self.repodir = self.get_selected_bookmark()
121 if not self.repodir:
122 self.repodir = qtutils.opendir_dialog(N_('Open Git Repository...'),
123 core.getcwd())
124 if self.repodir:
125 self.accept()
127 def clone_repo(self):
128 guicmds.clone_repo(self, self.runtask, self.progress,
129 self.clone_repo_done, False)
131 def clone_repo_done(self, task):
132 if task.cmd and task.cmd.ok:
133 self.repodir = task.destdir
134 self.accept()
135 else:
136 guicmds.report_clone_repo_errors(task)
138 def new_repo(self):
139 repodir = guicmds.new_repo()
140 if repodir:
141 self.repodir = repodir
142 self.accept()
144 def open_bookmark(self, index):
145 if(index.row() == 0):
146 self.open_repo()
147 else:
148 self.repodir = self.bookmarks_model.data(index)
149 if self.repodir:
150 self.accept()
152 def get_selected_bookmark(self):
153 selected = self.bookmarks.selectedIndexes()
154 if(len(selected) > 0 and selected[0].row() != 0):
155 return self.bookmarks_model.data(selected[0])
156 return None