diff --git a/src/kdesvnview.cpp b/src/kdesvnview.cpp index 8c995d98..792b031c 100644 --- a/src/kdesvnview.cpp +++ b/src/kdesvnview.cpp @@ -1,460 +1,461 @@ /*************************************************************************** * Copyright (C) 2005-2009 by Rajko Albrecht * * ral@alwins-world.de * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "kdesvnview.h" #include "svnfrontend/maintreewidget.h" #include "svnfrontend/createrepodlg.h" #include "svnfrontend/dumprepo_impl.h" #include "svnfrontend/hotcopydlg_impl.h" #include "svnfrontend/loaddmpdlg_impl.h" #include "svnfrontend/stopdlg.h" #include "svnfrontend/fronthelpers/propertylist.h" #include "settings/kdesvnsettings.h" #include "svnqt/url.h" #include "svnqt/repository.h" #include "svnqt/version_check.h" #include "svnqt/svnqttypes.h" #include #include #include #include #include #include #include #include #include #include #include kdesvnView::kdesvnView(KActionCollection *aCollection, QWidget *parent, bool full) : QWidget(parent), svn::repository::RepositoryListener() , m_Collection(aCollection) , m_currentUrl() , m_CacheProgressBar(nullptr) , m_ReposCancel(false) { Q_UNUSED(full); setFocusPolicy(Qt::StrongFocus); setupActions(); m_topLayout = new QVBoxLayout(this); m_Splitter = new QSplitter(this); m_Splitter->setOrientation(Qt::Vertical); //m_TreeWidget=new kdesvnfilelist(m_Collection,m_Splitter); m_TreeWidget = new MainTreeWidget(m_Collection, m_Splitter); m_infoSplitter = new QSplitter(m_Splitter); m_infoSplitter->setOrientation(Qt::Horizontal); m_infoSplitter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_LogWindow = new QTextBrowser(m_infoSplitter); m_LogWindow->setContextMenuPolicy(Qt::CustomContextMenu); connect(m_LogWindow, &QWidget::customContextMenuRequested, this, &kdesvnView::onCustomLogWindowContextMenuRequested); Propertylist *pl = new Propertylist(m_infoSplitter); pl->setCommitchanges(true); - pl->addCallback(m_TreeWidget); + connect(pl, &Propertylist::sigSetProperty, + m_TreeWidget, &MainTreeWidget::slotChangeProperties); connect(m_TreeWidget, &MainTreeWidget::sigProplist, pl, &Propertylist::displayList); connect(m_TreeWidget, &MainTreeWidget::sigProplist, pl, &Propertylist::displayList); m_TreeWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_topLayout->addWidget(m_Splitter); connect(m_TreeWidget, &MainTreeWidget::sigLogMessage, this, &kdesvnView::slotAppendLog); connect(m_TreeWidget, &MainTreeWidget::changeCaption, this, &kdesvnView::slotSetTitle); connect(m_TreeWidget, &MainTreeWidget::sigShowPopup, this, &kdesvnView::slotDispPopup); connect(m_TreeWidget, &MainTreeWidget::sigUrlOpened, this, &kdesvnView::sigUrlOpened); connect(m_TreeWidget, &MainTreeWidget::sigSwitchUrl, this, &kdesvnView::sigSwitchUrl); connect(m_TreeWidget, &MainTreeWidget::sigUrlChanged, this, &kdesvnView::slotUrlChanged); connect(m_TreeWidget, &MainTreeWidget::sigCacheStatus, this, &kdesvnView::fillCacheStatus); connect(m_TreeWidget, &MainTreeWidget::sigExtraStatusMessage, this, &kdesvnView::sigExtraStatusMessage); connect(this, &kdesvnView::sigMakeBaseDirs, m_TreeWidget, &MainTreeWidget::slotMkBaseDirs); KConfigGroup cs(Kdesvnsettings::self()->config(), "kdesvn-mainlayout"); QByteArray t1 = cs.readEntry("split1", QByteArray()); if (!t1.isEmpty()) { m_Splitter->restoreState(t1); } if (m_infoSplitter) { t1 = cs.readEntry("infosplit", QByteArray()); if (!t1.isEmpty()) { m_infoSplitter->restoreState(t1); } } } void kdesvnView::slotAppendLog(const QString &text) { m_LogWindow->append(text); } kdesvnView::~kdesvnView() { } void kdesvnView::slotSavestate() { KConfigGroup cs(Kdesvnsettings::self()->config(), "kdesvn-mainlayout"); cs.writeEntry("split1", m_Splitter->saveState()); if (m_infoSplitter) { cs.writeEntry("infosplit", m_infoSplitter->saveState()); } } void kdesvnView::slotUrlChanged(const QUrl &url) { m_currentUrl = url; slotSetTitle(url.toString()); emit sigUrlChanged(url); slotOnURL(i18n("Repository opened")); } QUrl kdesvnView::currentUrl() const { return m_currentUrl; } bool kdesvnView::openUrl(const QUrl &url) { /* transform of url must be done in part! otherwise we will run into different troubles! */ m_currentUrl.clear(); QUrl _url(url); bool open = false; if (_url.isLocalFile()) { QString query = _url.query(); _url.setQuery(QString()); QString _f = _url.path(); QFileInfo f(_f); if (!f.isDir()) { m_currentUrl.clear(); return open; } if (query.length() > 1) { _url.setQuery(query); } } else { if (!svn::Url::isValid(url.scheme())) { return open; } } m_LogWindow->clear(); slotSetTitle(url.toString()); if (m_TreeWidget->openUrl(url)) { slotOnURL(i18n("Repository opened")); m_currentUrl = url; open = true; } else { QString t = m_TreeWidget->lastError(); if (t.isEmpty()) { t = i18n("Could not open repository"); } slotOnURL(t); } return open; } void kdesvnView::slotOnURL(const QString &url) { emit signalChangeStatusbar(url); } void kdesvnView::slotSetTitle(const QString &title) { //emit signalChangeCaption(title); emit setWindowCaption(title); } /*! \fn kdesvnView::closeMe() */ void kdesvnView::closeMe() { m_TreeWidget->closeMe(); m_LogWindow->clear(); slotOnURL(i18n("No repository open")); } void kdesvnView::slotDispPopup(const QString &item, QWidget **target) { emit sigShowPopup(item, target); } /*! \fn kdesvnView::refreshCurrentTree() */ void kdesvnView::refreshCurrentTree() { m_TreeWidget->refreshCurrentTree(); } /*! \fn kdesvnView::slotSettingsChanged() */ void kdesvnView::slotSettingsChanged() { m_TreeWidget->slotSettingsChanged(); } /*! \fn kdesvnView::slotCreateRepo() */ void kdesvnView::slotCreateRepo() { QPointer dlg(new CreaterepoDlg(this)); if (dlg->exec() != QDialog::Accepted) { delete dlg; return; } QScopedPointer _rep(new svn::repository::Repository(this)); bool ok = true; closeMe(); try { _rep->CreateOpen(dlg->parameter()); } catch (const svn::ClientException &e) { slotAppendLog(e.msg()); ok = false; } if (!ok) { delete dlg; return; } bool createdirs = dlg->createMain(); // repo is created on a local path const QUrl path = QUrl::fromLocalFile(dlg->targetDir()); delete dlg; openUrl(path); if (createdirs) { emit sigMakeBaseDirs(); } } void kdesvnView::slotHotcopy() { QPointer dlg(new KSvnSimpleOkDialog(QStringLiteral("hotcopy_repo_size"), QApplication::activeModalWidget())); dlg->setWindowTitle(i18nc("@title:window", "Hotcopy a Repository")); dlg->setWithCancelButton(); HotcopyDlg_impl *ptr = new HotcopyDlg_impl(dlg); dlg->addWidget(ptr); if (dlg->exec() != QDialog::Accepted) { delete dlg; return; } bool cleanlogs = ptr->cleanLogs(); QString src = ptr->srcPath(); QString dest = ptr->destPath(); delete dlg; if (src.isEmpty() || dest.isEmpty()) { return; } try { svn::repository::Repository::hotcopy(src, dest, cleanlogs); slotAppendLog(i18n("Hotcopy finished.")); } catch (const svn::ClientException &e) { slotAppendLog(e.msg()); } } void kdesvnView::slotLoaddump() { QPointer dlg(new KSvnSimpleOkDialog(QStringLiteral("loaddump_repo_size"), this)); dlg->setWindowTitle(i18nc("@title:window", "Load a Repository From an svndump")); dlg->setWithCancelButton(); LoadDmpDlg_impl *ptr(new LoadDmpDlg_impl(dlg)); dlg->addWidget(ptr); if (dlg->exec() != QDialog::Accepted) { delete dlg; return; } svn::repository::Repository _rep(this); m_ReposCancel = false; try { _rep.Open(ptr->repository()); } catch (const svn::ClientException &e) { slotAppendLog(e.msg()); return ; } svn::repository::Repository::LOAD_UUID _act; switch (ptr->uuidAction()) { case 1: _act = svn::repository::Repository::UUID_IGNORE_ACTION; break; case 2: _act = svn::repository::Repository::UUID_FORCE_ACTION; break; case 0: default: _act = svn::repository::Repository::UUID_DEFAULT_ACTION; break; } const QUrl _uri = ptr->dumpFile(); QString _input; QTemporaryFile tmpfile; if (_uri.isLocalFile()) { _input = _uri.toLocalFile(); } else { tmpfile.open(); KIO::FileCopyJob *job = KIO::file_copy(_uri, QUrl::fromLocalFile(tmpfile.fileName())); KJobWidgets::setWindow(job, this); if (!job->exec()) { KMessageBox::error(this, job->errorString()); return; } _input = tmpfile.fileName(); } try { StopDlg sdlg(nullptr, this, i18nc("@title:window", "Load Dump"), i18n("Loading a dump into a repository.")); _rep.loaddump(_input, _act, ptr->parentPath(), ptr->usePre(), ptr->usePost(), ptr->validateProps()); slotAppendLog(i18n("Loading dump finished.")); } catch (const svn::ClientException &e) { slotAppendLog(e.msg()); } delete dlg; } void kdesvnView::slotDumpRepo() { QPointer dlg(new KSvnSimpleOkDialog(QStringLiteral("dump_repo_size"), QApplication::activeModalWidget())); dlg->setWindowTitle(i18nc("@title:window", "Dump a Repository")); dlg->setWithCancelButton(); DumpRepo_impl *ptr(new DumpRepo_impl(dlg)); dlg->addWidget(ptr); if (dlg->exec() != QDialog::Accepted) { delete dlg; return; } const QString re = ptr->reposPath(); const QString out = ptr->targetFile(); const bool incr = ptr->incremental(); const bool diffs = ptr->use_deltas(); const int s = ptr->startNumber(); const int e = ptr->endNumber(); delete dlg; m_ReposCancel = false; svn::Revision st = svn::Revision::UNDEFINED; svn::Revision en = svn::Revision::UNDEFINED; if (s > -1) { st = s; } if (e > -1) { en = e; } svn::repository::Repository *_rep(new svn::repository::Repository(this)); try { _rep->Open(re); } catch (const svn::ClientException &e) { slotAppendLog(e.msg()); delete _rep; return; } try { StopDlg sdlg(nullptr, this, i18nc("@title:window", "Dump"), i18n("Dumping a repository")); _rep->dump(out, st, en, incr, diffs); slotAppendLog(i18n("Dump finished.")); } catch (const svn::ClientException &e) { slotAppendLog(e.msg()); } delete _rep; } /*! \fn kdesvnView::setupActions() */ void kdesvnView::setupActions() { } void kdesvnView::sendWarning(const QString &aMsg) { slotAppendLog(aMsg); } void kdesvnView::sendError(const QString &aMsg) { slotAppendLog(aMsg); } bool kdesvnView::isCanceld() { if (!m_ReposCancel) { emit tickProgress(); return false; } return true; } void kdesvnView::setCanceled(bool how) { m_ReposCancel = how; } void kdesvnView::fillCacheStatus(qlonglong current, qlonglong max) { if (current > -1 && max > -1) { if (!m_CacheProgressBar) { m_CacheProgressBar = new QProgressBar(this); m_CacheProgressBar->setRange(0, (int)max); m_topLayout->addWidget(m_CacheProgressBar); m_CacheProgressBar->setFormat(i18n("Inserted %v not cached log entries of %m.")); } if (!m_CacheProgressBar->isVisible()) { m_CacheProgressBar->show(); } m_CacheProgressBar->setValue((int)current); } else { delete m_CacheProgressBar; m_CacheProgressBar = nullptr; } } void kdesvnView::stopCacheThreads() { m_TreeWidget->stopLogCache(); } void kdesvnView::onCustomLogWindowContextMenuRequested(const QPoint &pos) { QPointer menu = m_LogWindow->createStandardContextMenu(); QAction *clearAction = new QAction(tr("Clear"), menu.data()); clearAction->setEnabled(!m_LogWindow->toPlainText().isEmpty()); connect(clearAction, &QAction::triggered, m_LogWindow, &QTextEdit::clear); menu->addAction(clearAction); menu->exec(m_LogWindow->mapToGlobal(pos)); delete menu; } diff --git a/src/svnfrontend/fronthelpers/propertylist.cpp b/src/svnfrontend/fronthelpers/propertylist.cpp index a319aea2..c94e3a1d 100644 --- a/src/svnfrontend/fronthelpers/propertylist.cpp +++ b/src/svnfrontend/fronthelpers/propertylist.cpp @@ -1,166 +1,158 @@ /*************************************************************************** * Copyright (C) 2007 by Rajko Albrecht ral@alwins-world.de * * http://kdesvn.alwins-world.de/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "propertylist.h" #include "kmultilinedelegate.h" #include "svnfrontend/fronthelpers/propertyitem.h" #include #include #include Propertylist::Propertylist(QWidget *parent) : QTreeWidget(parent) , m_commitit(false) , m_Dir(false) { setItemDelegate(new KMultilineDelegate(this)); QTimer::singleShot(0, this, &Propertylist::init); } Propertylist::~Propertylist() { } void Propertylist::init() { headerItem()->setText(0, i18n("Property")); headerItem()->setText(1, i18n("Value")); setAllColumnsShowFocus(true); setRootIsDecorated(false); sortItems(0, Qt::AscendingOrder); setAcceptDrops(false); setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); setContextMenuPolicy(Qt::ActionsContextMenu); connect(this, &QTreeWidget::itemChanged, this, &Propertylist::slotItemChanged, Qt::UniqueConnection); resizeColumnToContents(0); } void Propertylist::displayList(const svn::PathPropertiesMapListPtr &propList, bool editable, bool isDir, const QString &aCur) { disconnect(this, &QTreeWidget::itemChanged, this, &Propertylist::slotItemChanged); viewport()->setUpdatesEnabled(false); clear(); m_Dir = isDir; if (propList) { m_current = aCur; if (!propList->isEmpty()) { /* just want the first one */ const svn::PropertiesMap pmap = propList->at(0).second; svn::PropertiesMap::const_iterator pit; for (pit = pmap.constBegin(); pit != pmap.constEnd(); ++pit) { PropertyListViewItem *ki = new PropertyListViewItem(this, pit.key(), pit.value()); if (editable && !PropertyListViewItem::protected_Property(ki->currentName())) { ki->setFlags(ki->flags() | Qt::ItemIsEditable); } } } } viewport()->setUpdatesEnabled(true); viewport()->repaint(); connect(this, &QTreeWidget::itemChanged, this, &Propertylist::slotItemChanged, Qt::UniqueConnection); resizeColumnToContents(0); } void Propertylist::clear() { QTreeWidget::clear(); } /*! \fn PropertiesDlg::slotItemRenamed(QListViewItem*item,const QString & str,int col ) */ void Propertylist::slotItemChanged(QTreeWidgetItem *_item, int col) { if (!_item || _item->type() != PropertyListViewItem::_RTTI_) { return; } PropertyListViewItem *item = static_cast(_item); QString text = item->text(col); if (text.isEmpty() && col == 0) { item->setText(0, item->currentName()); return; } bool fail = false; disconnect(this, &QTreeWidget::itemChanged, this, &Propertylist::slotItemChanged); if (PropertyListViewItem::protected_Property(item->text(0)) || PropertyListViewItem::protected_Property(item->currentName())) { KMessageBox::error(this, i18n("This property may not set by users.\nRejecting it."), i18n("Protected property")); item->setText(0, item->currentName()); item->setText(1, item->currentValue()); fail = true; } else if (checkExisting(item->text(0), item)) { KMessageBox::error(this, i18n("A property with that name exists.\nRejecting it."), i18n("Double property")); item->setText(0, item->currentName()); item->setText(1, item->currentValue()); fail = true; } connect(this, &QTreeWidget::itemChanged, this, &Propertylist::slotItemChanged); if (fail) { return; } if (col == 0) { item->checkName(); } else { item->checkValue(); } if (commitchanges() && item->different()) { svn::PropertiesMap pm; QStringList dels; pm[item->currentName()] = item->currentValue(); if (item->currentName() != item->startName()) { dels.push_back(item->startName()); } emit sigSetProperty(pm, dels, m_current); } } bool Propertylist::checkExisting(const QString &aName, QTreeWidgetItem *it) { if (!it) { return !findItems(aName, Qt::MatchExactly | Qt::MatchRecursive, 0).isEmpty(); } QTreeWidgetItemIterator iter(this); while (*iter) { if ((*iter) == it) { ++iter; continue; } if ((*iter)->text(0) == aName) { return true; } ++iter; } return false; } - -void Propertylist::addCallback(QObject *ob) -{ - if (ob) { - connect(this, SIGNAL(sigSetProperty(svn::PropertiesMap,QStringList,QString)), - ob, SLOT(slotChangeProperties(svn::PropertiesMap,QStringList,QString))); - } -} diff --git a/src/svnfrontend/fronthelpers/propertylist.h b/src/svnfrontend/fronthelpers/propertylist.h index d48947df..8b92861b 100644 --- a/src/svnfrontend/fronthelpers/propertylist.h +++ b/src/svnfrontend/fronthelpers/propertylist.h @@ -1,62 +1,61 @@ /*************************************************************************** * Copyright (C) 2007 by Rajko Albrecht ral@alwins-world.de * * http://kdesvn.alwins-world.de/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #pragma once #include #include #include "svnqt/svnqttypes.h" class SvnItem; /** @author */ class Propertylist : public QTreeWidget { Q_OBJECT public: explicit Propertylist(QWidget *parent = nullptr); ~Propertylist(); bool checkExisting(const QString &aName, QTreeWidgetItem *it = nullptr); - bool commitchanges()const + bool commitchanges() const { return m_commitit; } void setCommitchanges(bool how) { m_commitit = how; } - void addCallback(QObject *ob); public Q_SLOTS: void displayList(const svn::PathPropertiesMapListPtr &, bool, bool, const QString &); void clear(); protected Q_SLOTS: void init(); void slotItemChanged(QTreeWidgetItem *item, int col); Q_SIGNALS: void sigSetProperty(const svn::PropertiesMap &, const QStringList &, const QString &); protected: bool m_commitit; QString m_current; bool m_Dir; }; diff --git a/src/svnfrontend/maintreewidget.h b/src/svnfrontend/maintreewidget.h index 75deac12..7cd26256 100644 --- a/src/svnfrontend/maintreewidget.h +++ b/src/svnfrontend/maintreewidget.h @@ -1,200 +1,200 @@ /*************************************************************************** * Copyright (C) 2008 by Rajko Albrecht ral@alwins-world.de * * http://kdesvn.alwins-world.de/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #ifndef MAINTREEWIDGET_H #define MAINTREEWIDGET_H #include "ui_treeWidget.h" #include "itemdisplay.h" #include "frontendtypes.h" #include "svnqt/status.h" #include "svnqt/client.h" #include #include class KActionCollection; class MainTreeWidgetData; class SvnItemModelNode; class KJob; class MainTreeWidget: public QWidget, public Ui::mainTreeWidget, public ItemDisplay { Q_OBJECT public: explicit MainTreeWidget(KActionCollection *aCollection, QWidget *parent = nullptr, Qt::WindowFlags f = nullptr); ~MainTreeWidget(); QWidget *realWidget() override; SvnItem *Selected()const override; SvnItemList SelectionList()const override; svn::Revision baseRevision()const override; bool openUrl(const QUrl &url, bool noReinit = false) override; SvnItem *SelectedOrMain()const override; SvnItem *DirSelected()const; QModelIndex SelectedIndex()const; QModelIndex DirSelectedIndex()const; SvnItemModelNode *SelectedNode()const; SvnItemModelNode *DirSelectedNode()const; SvnItemList DirSelectionList()const; SvnItem *DirSelectedOrMain()const; void refreshItem(SvnItemModelNode *node); void clear(); KActionCollection *filesActions(); Q_SIGNALS: void sigLogMessage(const QString &); void sigExtraStatusMessage(const QString &); void changeCaption(const QString &); void sigShowPopup(const QString &, QWidget **); void sigUrlOpened(bool); void sigSwitchUrl(const QUrl &); void sigUrlChanged(const QUrl &); void sigProplist(const svn::PathPropertiesMapListPtr &, bool, bool, const QString &); void sigListError(); void sigCacheStatus(qlonglong, qlonglong); public Q_SLOTS: void closeMe(); void refreshCurrentTree(); void slotSettingsChanged(); void slotSelectionChanged(const QItemSelection &, const QItemSelection &); void slotNotifyMessage(const QString &); void slotMkBaseDirs(); void slotMkdir(); void refreshCurrent(SvnItem *); void slotReinitItem(SvnItem *); void stopLogCache(); + void slotChangeProperties(const svn::PropertiesMap &, const QStringList &, const QString &); protected Q_SLOTS: void slotCacheDataChanged(); void slotItemActivated(const QModelIndex &); void slotItemExpanded(const QModelIndex &); void slotItemsInserted(const QModelIndex &); void slotRefreshItem(const QString &path); void _propListTimeout(); void slotCheckUpdates(); void slotCheckModified(); void readSupportData(); void slotClientException(const QString &); void slotIgnore(); void slotLeftRecAddIgnore(); void slotRightRecAddIgnore(); void slotMakeLog()const; void slotMakeLogNoFollow()const; void slotDirMakeLogNoFollow()const; void slotMakeTree(); void slotMakePartTree(); void slotSelectBrowsingRevision(); void slotLock(); void slotUnlock(); void slotDisplayLastDiff(); void slotSimpleHeadDiff(); void slotSimpleBaseDiff(); void slotDirSimpleBaseDiff(); void slotDiffRevisions(); void slotDiffPathes(); void slotInfo(); void slotBlame(); void slotRangeBlame(); void slotDisplayProperties(); - void slotChangeProperties(const svn::PropertiesMap &, const QStringList &, const QString &); void slotCat(); void slotRevisionCat(); void slotResolved(); void slotTryResolve(); void slotDelete(); void slotLeftDelete(); void slotRename(); void slotCopy(); void slotCleanupAction(); void slotMergeRevisions(); void slotMerge(); void slotRelocate(); void slotImportIntoCurrent(bool); void slotImportDirsIntoCurrent(); void slotImportIntoDir(const QString &source, const QUrl &_targetUri, bool dirs); void slotChangeToRepository(); void slotCheckNewItems(); void slotCommit(); void slotDirCommit(); void slotDirUpdate(); void slotDirRecProperty(); void slotDirSelectionChanged(const QItemSelection &_item, const QItemSelection &); void checkSyncTreeModel(); void _openUrl(const QUrl &); void enableActions(); void slotUnfoldTree(); void slotFoldTree(); void slotOpenWith(); void slotContextMenu(const QPoint &); void slotDirContextMenu(const QPoint &); void slotCopyFinished(KJob *job); void slotUpdateLogCache(); void slotUrlDropped(const QList &, Qt::DropAction, const QModelIndex &, bool); void slotRepositorySettings(); void slotRightProperties(); void slotLeftProperties(); void resizeAllColumns(); protected: void keyPressEvent(QKeyEvent *) override; void setupActions(); bool uniqueTypeSelected(); KService::List offersList(SvnItem *item, bool execOnly = false)const; int selectionCount()const; int DirselectionCount()const; void dispProperties(bool); void copy_move(bool move); void itemActivated(const QModelIndex &index, bool keypress = false); void internalDrop(const QList &_lst, Qt::DropAction action, const QModelIndex &index); void execContextMenu(const SvnItemList &); void simpleWcDiff(SvnItem *which, const svn::Revision &, const svn::Revision &); void doLog(bool, bool)const; void checkUseNavigation(bool startup = false); void makeDelete(const SvnItemList &lst); void recAddIgnore(SvnItem *which); private: MainTreeWidgetData *m_Data; void enableAction(const QString &, bool); QAction *add_action(const QString &actionname, const QString &text, const QKeySequence &sequ, const QIcon &, QObject *, const char *slot); }; #endif