2 Provides the git-cola startup dialog
4 The startup dialog is presented when no repositories can be
10 from PyQt4
import QtGui
11 from PyQt4
.QtCore
import Qt
12 from PyQt4
.QtCore
import SIGNAL
14 from cola
import guicmds
15 from cola
import settings
16 from cola
import qtutils
17 from cola
.i18n
import N_
18 from cola
.widgets
import defs
21 class StartupDialog(QtGui
.QDialog
):
22 """Provides a GUI to Open or Clone a git repository."""
24 def __init__(self
, parent
=None):
25 QtGui
.QDialog
.__init
__(self
, parent
)
26 self
.setWindowTitle(N_('git-cola'))
29 self
._layt
= QtGui
.QHBoxLayout()
30 self
._layt
.setMargin(defs
.margin
)
31 self
._layt
.setSpacing(defs
.spacing
)
33 self
._new
_btn
= QtGui
.QPushButton(N_('New...'))
34 self
._new
_btn
.setIcon(qtutils
.new_icon())
36 self
._open
_btn
= QtGui
.QPushButton(N_('Open...'))
37 self
._open
_btn
.setIcon(qtutils
.open_icon())
39 self
._clone
_btn
= QtGui
.QPushButton(N_('Clone...'))
40 self
._clone
_btn
.setIcon(qtutils
.git_icon())
42 self
._close
_btn
= QtGui
.QPushButton(N_('Close'))
44 self
._layt
.addWidget(self
._open
_btn
)
45 self
._layt
.addWidget(self
._clone
_btn
)
46 self
._layt
.addWidget(self
._new
_btn
)
47 self
._layt
.addStretch()
48 self
._layt
.addWidget(self
._close
_btn
)
50 self
.model
= settings
.Settings()
52 self
._vlayt
= QtGui
.QVBoxLayout()
53 self
._vlayt
.setMargin(defs
.margin
)
54 self
._vlayt
.setSpacing(defs
.margin
)
56 self
._bookmark
_label
= QtGui
.QLabel(N_('Select Repository...'))
57 self
._bookmark
_label
.setAlignment(Qt
.AlignCenter
)
59 self
._bookmark
_model
= QtGui
.QStandardItemModel()
61 item
= QtGui
.QStandardItem(N_('Select manually...'))
62 item
.setEditable(False)
63 self
._bookmark
_model
.appendRow(item
)
66 all_repos
= self
.model
.bookmarks
+ self
.model
.recent
68 for repo
in all_repos
:
72 item
= QtGui
.QStandardItem(repo
)
73 item
.setEditable(False)
74 self
._bookmark
_model
.appendRow(item
)
76 selection_mode
= QtGui
.QAbstractItemView
.SingleSelection
78 self
._bookmark
_list
= QtGui
.QListView()
79 self
._bookmark
_list
.setSelectionMode(selection_mode
)
80 self
._bookmark
_list
.setAlternatingRowColors(True)
81 self
._bookmark
_list
.setModel(self
._bookmark
_model
)
84 self
._bookmark
_label
.setMinimumHeight(1)
85 self
._bookmark
_list
.setMinimumHeight(1)
86 self
._bookmark
_label
.hide()
87 self
._bookmark
_list
.hide()
89 self
._vlayt
.addWidget(self
._bookmark
_label
)
90 self
._vlayt
.addWidget(self
._bookmark
_list
)
91 self
._vlayt
.addLayout(self
._layt
)
93 self
.setLayout(self
._vlayt
)
95 qtutils
.connect_button(self
._open
_btn
, self
._open
)
96 qtutils
.connect_button(self
._clone
_btn
, self
._clone
)
97 qtutils
.connect_button(self
._new
_btn
, self
._new
)
98 qtutils
.connect_button(self
._close
_btn
, self
.reject
)
100 self
.connect(self
._bookmark
_list
,
101 SIGNAL('activated(const QModelIndex &)'),
105 def find_git_repo(self
):
107 Return a path to a git repository
109 This is the entry point for external callers.
110 This method finds a git repository by allowing the
111 user to browse to one on the filesystem or by creating
112 a new one with git-clone.
117 if self
.exec_() == QtGui
.QDialog
.Accepted
:
122 self
._gitdir
= self
._get
_selected
_bookmark
()
124 self
._gitdir
= qtutils
.opendir_dialog(N_('Open Git Repository...'),
130 gitdir
= guicmds
.clone_repo(spawn
=False)
132 self
._gitdir
= gitdir
136 gitdir
= guicmds
.new_repo()
138 self
._gitdir
= gitdir
141 def _open_bookmark(self
, index
):
142 if(index
.row() == 0):
145 self
._gitdir
= unicode(self
._bookmark
_model
.data(index
).toString())
149 def _get_selected_bookmark(self
):
150 selected
= self
._bookmark
_list
.selectedIndexes()
151 if(len(selected
) > 0 and selected
[0].row() != 0):
152 return unicode(self
._bookmark
_model
.data(selected
[0]).toString())