| 165 | } |
| 166 | |
| 167 | CommitToolView::CommitToolView(std::shared_ptr<RepoStatusModel> statusModel, QWidget* parent) |
| 168 | : QWidget(parent) |
| 169 | , m_statusmodel(std::move(statusModel)) |
| 170 | , m_proxymodel(new FilterEmptyItemsProxyModel(this)) |
| 171 | , m_commitForm(new SimpleCommitForm(this)) |
| 172 | , m_view(new QTreeView(this)) |
| 173 | , m_filter(new QLineEdit(this)) |
| 174 | , m_refreshMenu(new QMenu(this)) |
| 175 | , m_toolviewMenu(new QMenu(this)) |
| 176 | , m_styleDelegate(new ActiveStyledDelegate) |
| 177 | { |
| 178 | setWindowIcon(QIcon::fromTheme(QStringLiteral("git"))); |
| 179 | |
| 180 | |
| 181 | // FIXME: We should get the current area dock area from somewhere (the sublime area?) |
| 182 | // Right now we initially assume it is in the Qt::RightWidgetArea and layout |
| 183 | // accordingly (this may be wrong if the user previously moved it to, e.g. the |
| 184 | // bottom so its restored in the bottom area); when the user moves the dock |
| 185 | // widget we re-layout it and then the layout is always correct, since the signal |
| 186 | doLayOut(Qt::RightDockWidgetArea); |
| 187 | connect(dynamic_cast<QDockWidget*>(parent), &QDockWidget::dockLocationChanged, this, &CommitToolView::doLayOut); |
| 188 | |
| 189 | // Creates a proxy model so that we can filter the |
| 190 | // items by the text entered into the filter lineedit |
| 191 | m_proxymodel->setSourceModel(m_statusmodel.get()); |
| 192 | m_proxymodel->setFilterCaseSensitivity(Qt::CaseInsensitive); |
| 193 | m_proxymodel->setSortCaseSensitivity(Qt::CaseInsensitive); |
| 194 | m_proxymodel->setSortRole(Qt::DisplayRole); |
| 195 | m_proxymodel->setRecursiveFilteringEnabled(true); |
| 196 | connect(m_filter, &QLineEdit::textEdited, m_proxymodel, &QSortFilterProxyModel::setFilterWildcard); |
| 197 | m_filter->setToolTip(i18n("Filter by filename/project name")); |
| 198 | m_filter->setPlaceholderText(i18n("Filter by filename/project name")); |
| 199 | |
| 200 | // Sets up the view |
| 201 | m_view->setModel(m_proxymodel); |
| 202 | m_view->setHeaderHidden(true); |
| 203 | m_view->setEditTriggers(QAbstractItemView::NoEditTriggers); |
| 204 | m_view->setSelectionMode(QAbstractItemView::SelectionMode::ContiguousSelection); |
| 205 | m_view->setContextMenuPolicy(Qt::CustomContextMenu); |
| 206 | m_view->setAnimated(true); |
| 207 | m_view->setItemDelegate(m_styleDelegate); |
| 208 | |
| 209 | connect(m_view, &QTreeView::customContextMenuRequested, this, &CommitToolView::popupContextMenu); |
| 210 | connect(m_view, &QTreeView::doubleClicked, this, &CommitToolView::dblClicked); |
| 211 | connect(m_view, &QTreeView::clicked, this, &CommitToolView::clicked); |
| 212 | connect(m_view, &QTreeView::expanded, this, &CommitToolView::activateProject); |
| 213 | |
| 214 | // Construct the tool view context menus & actions |
| 215 | m_refreshModelAct = m_refreshMenu->addAction(QIcon::fromTheme(QStringLiteral("view-refresh")), i18n("Refresh")); |
| 216 | m_stageFilesAct = m_toolviewMenu->addAction(QIcon::fromTheme(QStringLiteral("list-add")), i18n("Stage selected")); |
| 217 | m_unstageFilesAct |
| 218 | = m_toolviewMenu->addAction(QIcon::fromTheme(QStringLiteral("list-remove")), i18n("Unstage selected")); |
| 219 | m_revertFilesAct |
| 220 | = m_toolviewMenu->addAction(QIcon::fromTheme(QStringLiteral("edit-undo")), i18n("Revert unstaged edits")); |
| 221 | |
| 222 | m_toolviewMenu->addAction(m_refreshModelAct); |
| 223 | |
| 224 | // Refresh diffs when documents are saved |
nothing calls this directly
no test coverage detected