1 """Provides the git-cola startup dialog
3 The startup dialog is presented when no repositories can be
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
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'))
31 self
.runtask
= qtutils
.RunTask(parent
=self
)
32 self
.progress
= standard
.ProgressDialog('', '', self
)
34 self
.new_button
= qtutils
.create_button(text
=N_('New...'),
36 self
.open_button
= qtutils
.create_button(text
=N_('Open...'),
38 self
.clone_button
= qtutils
.create_button(text
=N_('Clone...'),
40 self
.close_button
= qtutils
.close_button()
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
)
57 all_repos
= settings
.bookmarks
+ settings
.recent
59 for repo
in all_repos
:
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
)
75 self
.bookmarks_label
.setMinimumHeight(1)
76 self
.bookmarks
.setMinimumHeight(1)
77 self
.bookmarks_label
.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
,
85 self
.main_layout
= qtutils
.vbox(defs
.margin
, defs
.spacing
,
86 self
.bookmarks_label
, self
.bookmarks
,
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.
115 if self
.exec_() == QtGui
.QDialog
.Accepted
:
120 self
.repodir
= self
.get_selected_bookmark()
122 self
.repodir
= qtutils
.opendir_dialog(N_('Open Git Repository...'),
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
136 guicmds
.report_clone_repo_errors(task
)
139 repodir
= guicmds
.new_repo()
141 self
.repodir
= repodir
144 def open_bookmark(self
, index
):
145 if(index
.row() == 0):
148 self
.repodir
= self
.bookmarks_model
.data(index
)
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])