diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-11-16 16:05:53 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-11-16 16:05:53 -0600 |
commit | 2a84b711d4c9c28fd6e03457311fd05203318d24 (patch) | |
tree | c825e162ec40405187fd4892b08e8e036a5db308 /src/svnfrontend/kdesvnfilelist.cpp | |
parent | 6cd1f99df4d8a5385335e0148fb0d4e424631e6b (diff) | |
download | tdesvn-2a84b711d4c9c28fd6e03457311fd05203318d24.tar.gz tdesvn-2a84b711d4c9c28fd6e03457311fd05203318d24.zip |
Finish rename from prior commit
Diffstat (limited to 'src/svnfrontend/kdesvnfilelist.cpp')
-rw-r--r-- | src/svnfrontend/kdesvnfilelist.cpp | 3160 |
1 files changed, 0 insertions, 3160 deletions
diff --git a/src/svnfrontend/kdesvnfilelist.cpp b/src/svnfrontend/kdesvnfilelist.cpp deleted file mode 100644 index 976d3c1..0000000 --- a/src/svnfrontend/kdesvnfilelist.cpp +++ /dev/null @@ -1,3160 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-2007 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 "tdesvnfilelist.h" -#include "tdesvn_part.h" -#include "filelistviewitem.h" -#include "importdir_logmsg.h" -#include "copymoveview_impl.h" -#include "mergedlg_impl.h" -#include "svnactions.h" -#include "svnfiletip.h" -#include "keystatus.h" -#include "opencontextmenu.h" -#include "checkoutinfo_impl.h" -#include "stopdlg.h" -#include "src/settings/tdesvnsettings.h" -#include "src/svnqt/revision.hpp" -#include "src/svnqt/dirent.hpp" -#include "src/svnqt/client.hpp" -#include "src/svnqt/status.hpp" -#include "src/svnqt/url.hpp" -#include "helpers/sshagent.h" -#include "helpers/sub2qt.h" -#include "fronthelpers/cursorstack.h" -#include "fronthelpers/widgetblockstack.h" - -#include <kapplication.h> -#include <kiconloader.h> -#include <kdirwatch.h> -#include <klocale.h> -#include <kactioncollection.h> -#include <kshortcut.h> -#include <kmessagebox.h> -#include <kdirselectdialog.h> -#include <klineedit.h> -#include <kfileitem.h> -#include <kdialog.h> -#include <kfiledialog.h> -#include <kdebug.h> -#include <kurldrag.h> -#include <ktempfile.h> -#include <kio/job.h> -#include <krun.h> -#include <kurldrag.h> -#include <ktrader.h> - -#include <tqvbox.h> -#include <tqpainter.h> -#include <tqstyle.h> -#include <tqapplication.h> -#include <tqlayout.h> -#include <tqlabel.h> -#include <tqtooltip.h> -#include <tqregexp.h> -#include <tqpopupmenu.h> -#include <tqcursor.h> -#include <tqheader.h> -#include <tqcheckbox.h> - -#include <unistd.h> - -class KdesvnFileListPrivate{ -public: - KdesvnFileListPrivate(); - virtual ~KdesvnFileListPrivate() - { - if (m_DirWatch) { - m_DirWatch->stopScan(); - delete m_DirWatch; - } - delete m_fileTip; - kdDebug()<<"Destructor KdesvnFileListPrivate done"<<endl; - }; - TQListViewItem *dragOverItem; - TQPoint dragOverPoint; - TQRect mOldDropHighlighter; - svn::Revision m_remoteRevision; - KDirWatch*m_DirWatch; - SvnFileTip*m_fileTip; - int mlist_icon_size; - bool mdisp_ignored_files; - bool mdisp_unknown_files; - bool mdisp_overlay; - /* returns true if the display must refreshed */ - bool reReadSettings(); - - bool intern_dropRunning; - KURL::List intern_drops; - TQString intern_drop_target,merge_Src1, merge_Src2,merge_Target; - TQDropEvent::Action intern_drop_action; - TQPoint intern_drop_pos; - TQTimer drop_timer; - TQTimer dirwatch_timer; - TQTimer propTimer; - - bool mousePressed; - TQPoint presspos; - - TQMap<TQString,TQChar> dirItems; - - void stopDirTimer() - { - dirwatch_timer.stop(); - } - - void startDirTimer() - { - dirwatch_timer.start(250,true); - } - - void connectDirTimer(TQObject*ob) - { - TQObject::connect(&dirwatch_timer,TQT_SIGNAL(timeout()),ob,TQT_SLOT(_dirwatchTimeout())); - } - void stopScan() - { - if (m_DirWatch) { - m_DirWatch->stopScan(); - } - } - void startScan() - { - if (m_DirWatch) { - m_DirWatch->startScan(); - } - } - void startProptimer() - { - propTimer.start(100,true); - } - void stopProptimer() - { - propTimer.stop(); - } - void connectPropTimer(TQObject*ob) - { - TQObject::connect(&propTimer,TQT_SIGNAL(timeout()),ob,TQT_SLOT(_propListTimeout())); - } - -private: - void readSettings(); -}; - -KdesvnFileListPrivate::KdesvnFileListPrivate() - : dragOverItem(0),dragOverPoint(TQPoint(0,0)),mOldDropHighlighter() -{ - m_remoteRevision = svn::Revision::HEAD; - m_DirWatch = 0; - intern_dropRunning=false; - mousePressed = false; - readSettings(); -} - -void KdesvnFileListPrivate::readSettings() -{ - mlist_icon_size = Kdesvnsettings::listview_icon_size(); - mdisp_ignored_files = Kdesvnsettings::display_ignored_files(); - mdisp_unknown_files = Kdesvnsettings::display_unknown_files(); - mdisp_overlay = Kdesvnsettings::display_overlays(); -} - -bool KdesvnFileListPrivate::reReadSettings() -{ - int _size = mlist_icon_size; - bool _ignored = mdisp_ignored_files; - bool _overlay = mdisp_overlay; - bool _unknown = mdisp_unknown_files; - readSettings(); - return (_size != mlist_icon_size|| - _ignored!=mdisp_ignored_files|| - _overlay!=mdisp_overlay|| - _unknown != mdisp_unknown_files); -} - -tdesvnfilelist::tdesvnfilelist(KActionCollection*aCollect,TQWidget *parent, const char *name) - : KListView(parent, name),ItemDisplay(),m_SvnWrapper(new SvnActions(this)) -{ - m_SelectedItems = 0; - m_pList = new KdesvnFileListPrivate; - m_filesAction = aCollect; - m_pList->m_fileTip=new SvnFileTip(this); - m_pList->m_fileTip->setOptions(Kdesvnsettings::display_file_tips()&& - TQToolTip::isGloballyEnabled(),true,6); - - SshAgent ssh; - ssh.querySshAgent(); - - setMultiSelection(true); - setSelectionModeExt(FileManager); - setShowSortIndicator(true); - setAllColumnsShowFocus (true); - setRootIsDecorated(true); - addColumn(i18n("Name")); - addColumn(i18n("Status")); - addColumn(i18n("Last changed Revision")); - addColumn(i18n("Last author")); - addColumn(i18n("Last change date")); - addColumn(i18n("Locked by")); - setSortColumn(FileListViewItem::COL_NAME); - setupActions(); - - connect(this,TQT_SIGNAL(contextMenuRequested(TQListViewItem *, const TQPoint &, int)),this, - TQT_SLOT(slotContextMenuRequested(TQListViewItem *, const TQPoint &, int))); - - /* not via executed 'cause click may used for selection - single click execution - just confuses in an application */ - connect(this,TQT_SIGNAL(doubleClicked(TQListViewItem*)),this,TQT_SLOT(slotItemDoubleClicked(TQListViewItem*))); - connect(this,TQT_SIGNAL(returnPressed(TQListViewItem*)),this,TQT_SLOT(slotItemDoubleClicked(TQListViewItem*))); - - connect(this,TQT_SIGNAL(selectionChanged()),this,TQT_SLOT(slotSelectionChanged())); - connect(m_SvnWrapper,TQT_SIGNAL(clientException(const TQString&)),this,TQT_SLOT(slotClientException(const TQString&))); - connect(m_SvnWrapper,TQT_SIGNAL(sendNotify(const TQString&)),this,TQT_SLOT(slotNotifyMessage(const TQString&))); - connect(m_SvnWrapper,TQT_SIGNAL(reinitItem(SvnItem*)),this,TQT_SLOT(slotReinitItem(SvnItem*))); - connect(m_SvnWrapper,TQT_SIGNAL(sigRefreshAll()),this,TQT_SLOT(refreshCurrentTree())); - connect(m_SvnWrapper,TQT_SIGNAL(sigRefreshCurrent(SvnItem*)),this,TQT_SLOT(refreshCurrent(SvnItem*))); - connect(m_SvnWrapper,TQT_SIGNAL(sigRefreshIcons(bool)),this,TQT_SLOT(slotRescanIcons(bool))); - connect(this,TQT_SIGNAL(dropped (TQDropEvent*,TQListViewItem*)), - this,TQT_SLOT(slotDropped(TQDropEvent*,TQListViewItem*))); - connect(m_SvnWrapper,TQT_SIGNAL(sigGotourl(const TQString&)),this,TQT_SLOT(_openURL(const TQString&))); - - connect(m_SvnWrapper,TQT_SIGNAL(sigCachetqStatus(TQ_LONG,TQ_LONG)),this,TQT_SIGNAL(sigCachetqStatus(TQ_LONG,TQ_LONG))); - connect(m_SvnWrapper,TQT_SIGNAL(sigThreadsChanged()),this,TQT_SLOT(enableActions())); - - m_pList->connectDirTimer(TQT_TQOBJECT(this)); - m_pList->connectPropTimer(TQT_TQOBJECT(this)); - - setDropHighlighter(true); - setDragEnabled(true); - setItemsMovable(true); - setDropVisualizer(false); - setAcceptDrops(true); -} - -svn::Client*tdesvnfilelist::svnclient() -{ - return m_SvnWrapper->svnclient(); -} - -void tdesvnfilelist::setupActions() -{ - if (!m_filesAction) return; - KAction*tmp_action; - /* local and remote actions */ - /* 1. actions on dirs AND files */ - //new KAction(i18n("Log..."),"tdesvnlog",KShortcut(SHIFT+CTRL+Key_L),this,TQT_SLOT(slotMakeRangeLog()),m_filesAction,"make_svn_log"); - new KAction(i18n("Full Log"),"tdesvnlog",KShortcut(CTRL+Key_L),TQT_TQOBJECT(this),TQT_SLOT(slotMakeLog()),m_filesAction,"make_svn_log_full"); - new KAction(i18n("Full revision tree"),"tdesvnlog",KShortcut(CTRL+Key_T),TQT_TQOBJECT(this),TQT_SLOT(slotMakeTree()),m_filesAction,"make_svn_tree"); - new KAction(i18n("Partial revision tree"),"tdesvnlog",KShortcut(SHIFT+CTRL+Key_T), - TQT_TQOBJECT(this),TQT_SLOT(slotMakePartTree()),m_filesAction,"make_svn_partialtree"); - - new KAction(i18n("Properties"),"edit", - KShortcut(CTRL+Key_P),m_SvnWrapper,TQT_SLOT(slotProperties()),m_filesAction,"make_svn_property"); - new KAction(i18n("Display Properties"),"edit", - KShortcut(SHIFT+CTRL+Key_P),TQT_TQOBJECT(this),TQT_SLOT(slotDisplayProperties()),m_filesAction,"get_svn_property"); - - tmp_action = new KAction(i18n("Display last changes"),"tdesvndiff", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotDisplayLastDiff()),m_filesAction,"make_last_change"); - tmp_action->setToolTip(i18n("Display last changes as difference to previous commit.")); - - m_InfoAction = new KAction(i18n("Details"),"tdesvninfo", - KShortcut(CTRL+Key_I),TQT_TQOBJECT(this),TQT_SLOT(slotInfo()),m_filesAction,"make_svn_info"); - m_RenameAction = new KAction(i18n("Move"),"move", - KShortcut(Key_F2),TQT_TQOBJECT(this),TQT_SLOT(slotRename()),m_filesAction,"make_svn_rename"); - m_CopyAction = new KAction(i18n("Copy"),"tdesvncopy", - KShortcut(CTRL+Key_C),TQT_TQOBJECT(this),TQT_SLOT(slotCopy()),m_filesAction,"make_svn_copy"); - tmp_action = new KAction(i18n("Check for updates"),"tdesvncheckupdates",KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotCheckUpdates()),m_filesAction,"make_check_updates"); - tmp_action->setToolTip(i18n("Check if current working copy has items with newer version in repository")); - - /* 2. actions only on files */ - m_BlameAction = new KAction(i18n("Blame"),"tdesvnblame", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotBlame()),m_filesAction,"make_svn_blame"); - m_BlameAction->setToolTip(i18n("Output the content of specified files or URLs with revision and author information in-line.")); - m_BlameRangeAction = new KAction(i18n("Blame range"),"tdesvnblame", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotRangeBlame()),m_filesAction,"make_svn_range_blame"); - m_BlameRangeAction->setToolTip(i18n("Output the content of specified files or URLs with revision and author information in-line.")); - m_CatAction = new KAction(i18n("Cat head"), "tdesvncat", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotCat()),m_filesAction,"make_svn_cat"); - m_CatAction->setToolTip(i18n("Output the content of specified files or URLs.")); - tmp_action = new KAction(i18n("Cat revision..."),"tdesvncat", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotRevisionCat()),m_filesAction,"make_revisions_cat"); - tmp_action->setToolTip(i18n("Output the content of specified files or URLs at specific revision.")); - - m_LockAction = new KAction(i18n("Lock current items"),"tdesvnlock", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotLock()),m_filesAction,"make_svn_lock"); - m_UnlockAction = new KAction(i18n("Unlock current items"),"tdesvnunlock", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotUnlock()),m_filesAction,"make_svn_unlock"); - - /* 3. actions only on dirs */ - m_MkdirAction = new KAction(i18n("New folder"),"folder_new", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotMkdir()),m_filesAction,"make_svn_mkdir"); - m_switchRepository = new KAction(i18n("Switch repository"),"tdesvnswitch", - KShortcut(), m_SvnWrapper,TQT_SLOT(slotSwitch()),m_filesAction,"make_svn_switch"); - m_switchRepository->setToolTip(i18n("Switch repository path of current working copy path (\"svn switch\")")); - tmp_action = new KAction(i18n("Relocate current working copy url"),"tdesvnrelocate",KShortcut(), - TQT_TQOBJECT(this),TQT_SLOT(slotRelocate()),m_filesAction,"make_svn_relocate"); - tmp_action->setToolTip(i18n("Relocate url of current working copy path to other url")); - tmp_action = new KAction(i18n("Check for unversioned items"),"tdesvnaddrecursive",KShortcut(), - TQT_TQOBJECT(this),TQT_SLOT(slotCheckNewItems()),m_filesAction,"make_check_unversioned"); - tmp_action->setToolTip(i18n("Browse folder for unversioned items and add them if wanted.")); - - m_changeToRepository = new KAction(i18n("Open repository of working copy"),"gohome",KShortcut(), - TQT_TQOBJECT(this),TQT_SLOT(slotChangeToRepository()),m_filesAction,"make_switch_to_repo"); - m_changeToRepository->setToolTip(i18n("Opens the repository the current working copy was checked out from")); - - m_CleanupAction = new KAction(i18n("Cleanup"),"tdesvncleanup", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotCleanupAction()),m_filesAction,"make_cleanup"); - m_CleanupAction->setToolTip(i18n("Recursively clean up the working copy, removing locks, resuming unfinished operations, etc.")); - m_ImportDirsIntoCurrent = new KAction(i18n("Import folders into current"),"fileimport",KShortcut(), - TQT_TQOBJECT(this),TQT_SLOT(slotImportDirsIntoCurrent()),m_filesAction,"make_import_dirs_into_current"); - m_ImportDirsIntoCurrent->setToolTip(i18n("Import folder content into current url")); - - /* local only actions */ - /* 1. actions on files AND dirs*/ - m_AddCurrent = new KAction(i18n("Add selected files/dirs"), - "tdesvnadd",KShortcut(Key_Insert),m_SvnWrapper,TQT_SLOT(slotAdd()),m_filesAction,"make_svn_add"); - m_AddCurrent->setToolTip(i18n("Adding selected files and/or directories to repository")); - tmp_action = new KAction("Add selected files/dirs recursive", - "tdesvnaddrecursive",KShortcut(CTRL+Key_Insert),m_SvnWrapper,TQT_SLOT(slotAddRec()),m_filesAction,"make_svn_addrec"); - tmp_action->setToolTip(i18n("Adding selected files and/or directories to repository and all subitems of folders")); - - m_DelCurrent = new KAction(i18n("Delete selected files/dirs"),"tdesvndelete", - KShortcut(Key_Delete),TQT_TQOBJECT(this),TQT_SLOT(slotDelete()),m_filesAction,"make_svn_remove"); - m_DelCurrent->setToolTip(i18n("Deleting selected files and/or directories from repository")); - m_RevertAction = new KAction(i18n("Revert current changes"),"revert", - KShortcut(),m_SvnWrapper,TQT_SLOT(slotRevert()),m_filesAction,"make_svn_revert"); - - m_ResolvedAction = new KAction(i18n("Mark resolved"),KShortcut(), - TQT_TQOBJECT(this),TQT_SLOT(slotResolved()),m_filesAction,"make_resolved"); - m_ResolvedAction->setToolTip(i18n("Marking files or dirs resolved")); - - tmp_action = new KAction(i18n("Resolve conflicts"),KShortcut(), - TQT_TQOBJECT(this),TQT_SLOT(slotTryResolve()),m_filesAction,"make_try_resolve"); - - m_IgnoreAction = new KAction(i18n("Ignore/Unignore current item"),KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotIgnore()),m_filesAction,"make_svn_ignore"); - - m_UpdateHead = new KAction(i18n("Update to head"),"tdesvnupdate", - KShortcut(),m_SvnWrapper,TQT_SLOT(slotUpdateHeadRec()),m_filesAction,"make_svn_headupdate"); - m_UpdateRev = new KAction(i18n("Update to revision..."),"tdesvnupdate", - KShortcut(),m_SvnWrapper,TQT_SLOT(slotUpdateTo()),m_filesAction,"make_svn_revupdate"); - m_commitAction = new KAction(i18n("Commit"),"tdesvncommit", - KShortcut("CTRL+#"),m_SvnWrapper,TQT_SLOT(slotCommit()),m_filesAction,"make_svn_commit"); - - tmp_action = new KAction(i18n("Diff local changes"),"tdesvndiff", - KShortcut(CTRL+Key_D),TQT_TQOBJECT(this),TQT_SLOT(slotSimpleBaseDiff()),m_filesAction,"make_svn_basediff"); - tmp_action->setToolTip(i18n("Diff working copy against BASE (last checked out version) - doesn't require access to repository")); - - tmp_action = new KAction(i18n("Diff against HEAD"),"tdesvndiff", - KShortcut(CTRL+Key_H),TQT_TQOBJECT(this),TQT_SLOT(slotSimpleHeadDiff()),m_filesAction,"make_svn_headdiff"); - tmp_action->setToolTip(i18n("Diff working copy against HEAD (last checked in version)- requires access to repository")); - - tmp_action = new KAction(i18n("Diff items"),"tdesvndiff", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotDiffPathes()),m_filesAction,"make_svn_itemsdiff"); - tmp_action->setToolTip(i18n("Diff two items")); - - - m_MergeRevisionAction = new KAction(i18n("Merge two revisions"),"tdesvnmerge", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotMergeRevisions()),m_filesAction,"make_svn_merge_revisions"); - m_MergeRevisionAction->setToolTip(i18n("Merge two revisions of this entry into itself")); - - tmp_action=new KAction(i18n("Merge..."),"tdesvnmerge", - KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotMerge()),m_filesAction,"make_svn_merge"); - tmp_action->setToolTip("Merge repository path into current worky copy path or current repository path into a target"); - tmp_action=new KAction( i18n( "Open With..." ), 0, TQT_TQOBJECT(this), TQT_SLOT( slotOpenWith() ), m_filesAction, "openwith" ); - - /* remote actions only */ - m_CheckoutCurrentAction = new KAction(i18n("Checkout current repository path"),"tdesvncheckout",KShortcut(), - m_SvnWrapper,TQT_SLOT(slotCheckoutCurrent()),m_filesAction,"make_svn_checkout_current"); - m_ExportCurrentAction = new KAction(i18n("Export current repository path"),"tdesvnexport",KShortcut(), - m_SvnWrapper,TQT_SLOT(slotExportCurrent()),m_filesAction,"make_svn_export_current"); - new KAction(i18n("Select browse revision"),KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotSelectBrowsingRevision()),m_filesAction,"switch_browse_revision"); - - /* independe actions */ - m_CheckoutAction = new KAction(i18n("Checkout a repository"),"tdesvncheckout", - KShortcut(),m_SvnWrapper,TQT_SLOT(slotCheckout()),m_filesAction,"make_svn_checkout"); - m_ExportAction = new KAction(i18n("Export a repository"),"tdesvnexport", - KShortcut(),m_SvnWrapper,TQT_SLOT(slotExport()),m_filesAction,"make_svn_export"); - m_RefreshViewAction = new KAction(i18n("Refresh view"),"reload",KShortcut(Key_F5),TQT_TQOBJECT(this),TQT_SLOT(refreshCurrentTree()),m_filesAction,"make_view_refresh"); - - new KAction(i18n("Diff revisions"),"tdesvndiff",KShortcut(),TQT_TQOBJECT(this),TQT_SLOT(slotDiffRevisions()),m_filesAction,"make_revisions_diff"); - - /* folding options */ - tmp_action = new KAction( i18n("Unfold File Tree"), 0, TQT_TQOBJECT(this) , TQT_SLOT(slotUnfoldTree()), m_filesAction, "view_unfold_tree" ); - tmp_action->setToolTip(i18n("Opens all branches of the file tree")); - tmp_action = new KAction( i18n("Fold File Tree"), 0, TQT_TQOBJECT(this), TQT_SLOT(slotFoldTree()), m_filesAction, "view_fold_tree" ); - tmp_action->setToolTip(i18n("Closes all branches of the file tree")); - - /* caching */ - tmp_action = new KAction( i18n("Update log cache"),0,TQT_TQOBJECT(this),TQT_SLOT(slotUpdateLogCache()),m_filesAction,"update_log_cache" ); - tmp_action->setToolTip(i18n("Update the log cache for current repository")); - /* tmp_action = new KAction( i18n("Stop update log cache"),0,this,TQT_SLOT(slotUpdateLogCache()),m_filesAction,"stop_update_log_cache" ); - tmp_action->setToolTip(i18n("Stop the update of the log cache")); - */ - - enableActions(); - m_filesAction->setHighlightingEnabled(true); -} - -KActionCollection*tdesvnfilelist::filesActions() -{ - return m_filesAction; -} - -FileListViewItemList* tdesvnfilelist::allSelected() -{ - if (!m_SelectedItems) { - m_SelectedItems = new FileListViewItemList; - } - return m_SelectedItems; -} - -void tdesvnfilelist::SelectionList(SvnItemList*target) -{ - if (!m_SelectedItems||!target) return; - FileListViewItemListIterator iter(*m_SelectedItems); - FileListViewItem*cur; - while ( (cur=iter.current())!=0) { - ++iter; - target->append(cur); - } -} - -SvnItem*tdesvnfilelist::SelectedOrMain() -{ - if (singleSelected()!=0) { - return singleSelected(); - } - if (isWorkingCopy()&&firstChild()) { - return static_cast<FileListViewItem*>(firstChild()); - } - return 0; -} - -KURL::List tdesvnfilelist::selectedUrls() -{ - KURL::List lst; - FileListViewItemList*ls = allSelected(); - FileListViewItemListIterator it(*ls); - FileListViewItem*cur; - while ( (cur=it.current())!=0) { - ++it; - /* for putting it to outside we must convert it to KIO urls */ - lst.append(cur->kdeName(m_pList->m_remoteRevision)); - } - return lst; -} - -TQWidget*tdesvnfilelist::realWidget() -{ - return this; -} - -FileListViewItem* tdesvnfilelist::singleSelected() -{ - if (m_SelectedItems && m_SelectedItems->count()==1) { - return m_SelectedItems->at(0); - } - return 0; -} - -SvnItem*tdesvnfilelist::Selected() -{ - return singleSelected(); -} - -void tdesvnfilelist::_openURL(const TQString&url) -{ - openURL(url,true); - emit sigUrlChanged(baseUri()); -} - -bool tdesvnfilelist::openURL( const KURL &url,bool noReinit ) -{ - CursorStack a; - m_SvnWrapper->killallThreads(); - clear(); - emit sigProplist(svn::PathPropertiesMapListPtr(new svn::PathPropertiesMapList()),false,TQString("")); - m_Dirsread.clear(); - if (m_SelectedItems) { - m_SelectedItems->clear(); - } - m_LastException=""; - delete m_pList->m_DirWatch; - m_pList->m_DirWatch=0; - m_pList->dirItems.clear(); - m_pList->stopDirTimer(); - - if (!noReinit) m_SvnWrapper->reInitClient(); - - TQString query = url.query(); - - KURL _url = url; - TQString proto = svn::Url::transformProtokoll(url.protocol()); - _url.cleanPath(true); - _url.setProtocol(proto); - proto = _url.url(-1); - - TQStringList s = TQStringList::split("?",proto); - if (s.size()>1) { - setBaseUri(s[0]); - } else { - setBaseUri(proto); - } - setWorkingCopy(false); - setNetworked(false); - - m_pList->m_remoteRevision=svn::Revision::HEAD; - - - TQString _dummy; - - if (!TQString::compare("svn+file",url.protocol())) { - setBaseUri("file://"+url.path()); - } else { - if (url.isLocalFile()) { - TQString s = url.path(); - while(s.endsWith("/")) { - s.remove(s.length()-1,1); - } - TQFileInfo fi(s); - if (fi.exists() && fi.isSymLink()) { - TQString sl = fi.readLink(); - if (sl.startsWith("/")) { - setBaseUri(sl); - } else { - fi.setFile(fi.dirPath()+"/"+sl); - setBaseUri(fi.absFilePath()); - } - } else { - setBaseUri(url.path()); - } - if (m_SvnWrapper->isLocalWorkingCopy(baseUri(),_dummy)) { - setWorkingCopy(true); - } else { - // yes! KURL sometimes makes a correct localfile url (file:///) - // to a simple file:/ - that breakes subversion lib. so we make sure - // that we have a correct url - setBaseUri("file://"+baseUri()); - } - } else { - setNetworked(true); - if (!Kdesvnsettings::network_on()) { - setBaseUri(""); - setNetworked(false); - clear(); - KMessageBox::error(this,i18n("Networked URL to open but networking is disabled!")); - emit changeCaption(""); - emit sigUrlOpend(false); - return false; - } - } - } - if (query.length()>1) { - TQMap<TQString,TQString> q = url.queryItems(); - if (q.find("rev")!=q.end()) { - TQString v = q["rev"]; - svn::Revision tmp; - m_SvnWrapper->svnclient()->url2Revision(v,m_pList->m_remoteRevision,tmp); - if (m_pList->m_remoteRevision==svn::Revision::UNDEFINED) { - m_pList->m_remoteRevision = svn::Revision::HEAD; - } - } - } - - if (url.protocol()=="svn+ssh"|| - url.protocol()=="ksvn+ssh") { - SshAgent ssh; - ssh.addSshIdentities(); - } - m_SvnWrapper->clearUpdateCache(); - if (isWorkingCopy()) { - m_pList->m_DirWatch=new KDirWatch(TQT_TQOBJECT(this)); - connect(m_pList->m_DirWatch,TQT_SIGNAL(dirty(const TQString&)),this,TQT_SLOT(slotDirItemDirty(const TQString&))); - connect(m_pList->m_DirWatch,TQT_SIGNAL(created(const TQString&)),this,TQT_SLOT(slotDirItemCreated(const TQString&))); - connect(m_pList->m_DirWatch,TQT_SIGNAL(deleted(const TQString&)),this,TQT_SLOT(slotDirItemDeleted(const TQString&))); - /* seems that recursive does not work */ - if (m_pList->m_DirWatch) { - m_pList->m_DirWatch->addDir(baseUri()+"/",false,false); - m_pList->m_DirWatch->startScan(true); - } - } - bool result = checkDirs(baseUri(),0); - if (result && isWorkingCopy()) { - chdir(baseUri().local8Bit()); - if (firstChild()) firstChild()->setOpen(true); - } - if (!result) { - setBaseUri(""); - setNetworked(false); - clear(); - } - m_pList->m_fileTip->setOptions(!isNetworked()&&Kdesvnsettings::display_file_tips()&& - TQToolTip::isGloballyEnabled(),true,6); - - if (result && isWorkingCopy()) { - m_SvnWrapper->createModifiedCache(baseUri()); - if (Kdesvnsettings::start_updates_check_on_open()) { - slotCheckUpdates(); - } - } - if (Kdesvnsettings::log_cache_on_open()) { - kdDebug()<<"Starting logcache"<<endl; - m_SvnWrapper->startFillCache(baseUri()); - } - emit changeCaption(baseUri()); - emit sigUrlOpend(result); - TQTimer::singleShot(1,this,TQT_SLOT(readSupportData())); - enableActions(); - return result; -} - -void tdesvnfilelist::closeMe() -{ - m_SvnWrapper->killallThreads(); - - selectAll(false); - clear(); - setWorkingCopy(""); - setNetworked(false); - setWorkingCopy(false); - setBaseUri(""); - - emit changeCaption(""); - emit sigUrlOpend(false); - - enableActions(); - m_SvnWrapper->reInitClient(); - delete m_pList->m_DirWatch; - m_pList->m_DirWatch = 0; - m_pList->m_fileTip->setItem(0); -} - -bool tdesvnfilelist::checkDirs(const TQString&_what,FileListViewItem * _parent) -{ - TQString what = _what; - svn::StatusEntries dlist; - while (what.endsWith("/")) { - what.truncate(what.length()-1); - } - // prevent this from checking unversioned folder. FIXME: what happen when we do open url on a non-working-copy folder?? - if (!isWorkingCopy()|| (!_parent) || ((_parent) && (_parent->isVersioned()))) { - if (!m_SvnWrapper->maketqStatus(what,dlist,m_pList->m_remoteRevision) ) { - kdDebug() << "unable makeStatus" <<endl; - return false; - } - } else { - checkUnversionedDirs(_parent); - return true; - } - svn::StatusEntries neweritems; - m_SvnWrapper->getaddedItems(what,neweritems); - dlist+=neweritems; - bool ownupdates = true; - //kdDebug() << "makeStatus on " << what << " created: " << dlist.count() << "items" <<endl; - - if (isUpdatesEnabled()) { - viewport()->setUpdatesEnabled(false); - } else { - ownupdates=false; - } - svn::StatusEntries::iterator it = dlist.begin(); - FileListViewItem * pitem = 0; - bool main_found = false; - for (;it!=dlist.end();++it) { - //kdDebug() << "iterate over it: " << (*it)->entry().url() << endl; - - // current item is not versioned - if (!(*it)->isVersioned() && !filterOut((*it))) { - // if empty, we may want to create a default svn::tqStatus for each folder inside this _parent - // iterate over TQDir and create new filelistviewitem - checkUnversionedDirs(_parent); - } - - if ((*it)->path()==what||TQString::compare((*it)->entry().url(),what)==0){ - if (!_parent) { - pitem = new FileListViewItem(this,*it); - //kdDebug()<< "CheckDirs::creating new FileListViewitem as parent " + (*it)->path() << endl; - m_Dirsread[pitem->fullName()]=true; - pitem->setDropEnabled(true); - } - dlist.erase(it); - main_found = true; - break; - } - } - if (_parent) { - pitem = _parent; - } - insertDirs(pitem,dlist); - if (ownupdates) { - kdDebug()<<"Enable update"<<endl; - viewport()->setUpdatesEnabled(true); - viewport()->tqrepaint(); - } - return true; -} - -void tdesvnfilelist::insertDirs(FileListViewItem * _parent,svn::StatusEntries&dlist) -{ - svn::StatusEntries::iterator it; -#if 0 - KFileItemList oneItem; -#endif - - TQTime _t; - _t.start(); - for (it = dlist.begin();it!=dlist.end();++it) { -/* if (_t.elapsed()>300) { - viewport()->setUpdatesEnabled(true); - viewport()->tqrepaint(); - viewport()->setUpdatesEnabled(false); - _t.restart(); - }*/ - if (filterOut((*it))) - { - continue; - } - FileListViewItem * item; - if (!_parent) { - item = new FileListViewItem(this,*it); - } else { - if ( (item = _parent->findChild( (*it)->path() )) ) { - delete item; - } - item = new FileListViewItem(this,_parent,*it); - } - if (item->isDir()) { - m_Dirsread[item->fullName()]=false; - item->setDropEnabled(true); - if (isWorkingCopy()) { - m_pList->m_DirWatch->addDir(item->fullName()); - } - } else if (isWorkingCopy()) { - m_pList->m_DirWatch->addFile(item->fullName()); - } - } -} - -/* newdir is the NEW directory! just required if local */ -void tdesvnfilelist::slotDirAdded(const TQString&newdir,FileListViewItem*k) -{ - if (k) { - k->refreshtqStatus(); - } - if (!isWorkingCopy()) { - if (k) { - k->removeChilds(); - m_Dirsread[k->fullName()]=false; - if (checkDirs(k->fullName(),k)) { - m_Dirsread[k->fullName()]=true; - } else { - kdDebug()<<"Checkdirs failed"<<endl; - } - return; - } - TQListViewItem*temp; - while ((temp=firstChild())) { - delete temp; - } - m_Dirsread.clear(); - checkDirs(baseUri(),0); - return; - } - svn::StatusPtr stat; - try { - stat = m_SvnWrapper->svnclient()->singletqStatus(newdir); - } catch (const svn::ClientException&e) { - m_LastException = e.msg(); - kdDebug()<<"Catched on singlestatus"<< endl; - emit sigLogMessage(m_LastException); - return; - } - FileListViewItem * item,*pitem; - pitem = k; - if (!pitem) { - pitem = (FileListViewItem*)firstChild(); - if (pitem->fullName()!=baseUri()) { - pitem = 0; - } - } - if (!pitem) { - item = new FileListViewItem(this,stat); - } else { - item = new FileListViewItem(this,pitem,stat); - } - if (item->isDir()) { - m_Dirsread[item->fullName()]=false; - item->setDropEnabled(true); - if (isWorkingCopy()) { - m_pList->m_DirWatch->addDir(item->fullName()); - } - } else if (isWorkingCopy()) { - m_pList->m_DirWatch->addFile(item->fullName()); - } -} - -tdesvnfilelist::~tdesvnfilelist() -{ - delete m_pList; - delete m_SelectedItems; - SshAgent ssh; - ssh.killSshAgent(); -} - -void tdesvnfilelist::slotItemRead(TQListViewItem*aItem) -{ - if (!aItem) return; - CursorStack a(TQt::BusyCursor); - FileListViewItem* k = static_cast<FileListViewItem*>( aItem ); - bool _ex = true; - if (isWorkingCopy()) { - TQDir d(k->fullName()); //FIXME: remove this as soon as we've been able to set entry->kind in Checkdirs - _ex = k->isDir()||d.exists(); - } else { - _ex = k->isDir(); - } - - if (_ex &&(m_Dirsread.find(k->fullName())==m_Dirsread.end()||m_Dirsread[k->fullName()]==false)) { - if (checkDirs(k->fullName(),k)) { - m_Dirsread[k->fullName()]=true; - } else { - emit sigListError(); - } - } -} - -void tdesvnfilelist::slotReinitItem(SvnItem*item) -{ - if (!item) { - kdDebug()<<"tdesvnfilelist::slotReinitItem(SvnItem*item): item == null" << endl; - return; - } - FileListViewItem*k = item->fItem(); - if (!k) { - kdDebug()<<"tdesvnfilelist::slotReinitItem(SvnItem*item): k == null" << endl; - } - refreshItem(k); - if (!k) { - return; - } - if (k->isDir()) { - k->removeChilds(); - m_Dirsread[k->fullName()]=false;; - } -} - -void tdesvnfilelist::enableActions() -{ - bool isopen = baseUri().length()>0; - int c = allSelected()->count(); - bool single = c==1&&isopen; - bool multi = c>1&&isopen; - bool none = c==0&&isopen; - bool dir = false; - bool unique = uniqueTypeSelected(); - bool remote_enabled=isopen&&m_SvnWrapper->doNetworking(); - - if (single && allSelected()->at(0)->isDir()) { - dir = true; - } - - bool conflicted = single && allSelected()->at(0)->isConflicted(); - KAction * temp = 0; - /* local and remote actions */ - /* 1. actions on dirs AND files */ - temp = filesActions()->action("make_svn_log"); - if (temp) { - temp->setEnabled(single||none); - } - temp = filesActions()->action("make_last_change"); - if (temp) { - temp->setEnabled(isopen); - } - - temp = filesActions()->action("make_svn_log_full"); - if (temp) { - temp->setEnabled(single||none); - } - temp = filesActions()->action("make_svn_tree"); - if (temp) { - temp->setEnabled(single||none); - } - temp = filesActions()->action("make_svn_partialtree"); - if (temp) { - temp->setEnabled(single||none); - } - - temp = filesActions()->action("make_svn_property"); - if (temp) { - temp->setEnabled(single); - } - temp = filesActions()->action("get_svn_property"); - if (temp) { - temp->setEnabled(single); - } - m_DelCurrent->setEnabled( (multi||single)); - m_LockAction->setEnabled( (multi||single)); - m_UnlockAction->setEnabled( (multi||single)); - m_IgnoreAction->setEnabled((single)&&singleSelected()->parent()!=0&&!singleSelected()->isRealVersioned()); - - m_RenameAction->setEnabled(single && (!isWorkingCopy()||singleSelected()!=firstChild())); - m_CopyAction->setEnabled(single && (!isWorkingCopy()||singleSelected()!=firstChild())); - - /* 2. only on files */ - m_BlameAction->setEnabled(single&&!dir&&remote_enabled); - m_BlameRangeAction->setEnabled(single&&!dir&&remote_enabled); - m_CatAction->setEnabled(single&&!dir); - /* 3. actions only on dirs */ - m_MkdirAction->setEnabled(dir||none && isopen); - m_switchRepository->setEnabled(isWorkingCopy()&& (single||none)); - m_changeToRepository->setEnabled(isWorkingCopy()); - m_ImportDirsIntoCurrent->setEnabled(dir); - temp = filesActions()->action("make_svn_relocate"); - if (temp) { - temp->setEnabled(isWorkingCopy()&& (single||none)); - } - m_ExportCurrentAction->setEnabled(((single&&dir)||none)); - - /* local only actions */ - /* 1. actions on files AND dirs*/ - m_AddCurrent->setEnabled( (multi||single) && isWorkingCopy()); - m_RevertAction->setEnabled( (multi||single) && isWorkingCopy()); - m_ResolvedAction->setEnabled( (multi||single) && isWorkingCopy()); - temp = filesActions()->action("make_try_resolve"); - if (temp) { - temp->setEnabled(conflicted && !dir); - } - - m_InfoAction->setEnabled(isopen); - m_MergeRevisionAction->setEnabled(single&&isWorkingCopy()); - temp = filesActions()->action("make_svn_merge"); - if (temp) { - temp->setEnabled(single||none); - } - temp = filesActions()->action("make_svn_addrec"); - if (temp) { - temp->setEnabled( (multi||single) && isWorkingCopy()); - } - m_UpdateHead->setEnabled(isWorkingCopy()&&isopen&&remote_enabled); - m_UpdateRev->setEnabled(isWorkingCopy()&&isopen&&remote_enabled); - m_commitAction->setEnabled(isWorkingCopy()&&isopen&&remote_enabled); - - temp = filesActions()->action("make_svn_basediff"); - if (temp) { - temp->setEnabled(isWorkingCopy()&&(single||none)); - } - temp = filesActions()->action("make_svn_headdiff"); - if (temp) { - temp->setEnabled(isWorkingCopy()&&(single||none)&&remote_enabled); - } - - /// @todo check if all items have same type - temp = filesActions()->action("make_svn_itemsdiff"); - if (temp) { - temp->setEnabled(multi && c==2 && unique && remote_enabled); - } - - /* 2. on dirs only */ - m_CleanupAction->setEnabled(isWorkingCopy()&& (dir||none)); - temp = filesActions()->action("make_check_unversioned"); - if (temp) { - temp->setEnabled(isWorkingCopy()&& ((dir&&single) || none)); - } - - /* remote actions only */ - m_CheckoutCurrentAction->setEnabled( ((single&&dir)||none) && !isWorkingCopy() && remote_enabled); - /* independ actions */ - m_CheckoutAction->setEnabled(remote_enabled); - m_ExportAction->setEnabled(true); - m_RefreshViewAction->setEnabled(isopen); - - temp = filesActions()->action("make_revisions_diff"); - if (temp) { - temp->setEnabled(isopen); - } - temp = filesActions()->action("make_revisions_cat"); - if (temp) { - temp->setEnabled(isopen && !dir && single); - } - temp = filesActions()->action("switch_browse_revision"); - if (temp) { - temp->setEnabled(!isWorkingCopy()&&isopen); - } - temp = filesActions()->action("make_check_updates"); - if (temp) { - temp->setEnabled(isWorkingCopy()&&isopen && remote_enabled); - } - temp = filesActions()->action("openwith"); - if (temp) { - temp->setEnabled(kapp->authorizeKAction("openwith")&&single&&!dir); - } - - temp = filesActions()->action("update_log_cache"); - if (temp) { - temp->setEnabled(remote_enabled); - if (!m_SvnWrapper->threadRunning(SvnActions::fillcachethread)) { - temp->setText(i18n("Update log cache")); - } else { - temp->setText(i18n("Stop updating the logcache")); - } - } -} - -void tdesvnfilelist::slotSelectionChanged() -{ - m_pList->stopProptimer(); - if (m_SelectedItems==0) { - m_SelectedItems = new FileListViewItemList; - m_SelectedItems->setAutoDelete(false); - } - m_SelectedItems->clear(); - - TQListViewItemIterator it( this, TQListViewItemIterator::Selected ); - while ( it.current() ) { - m_SelectedItems->append( static_cast<FileListViewItem*>(it.current()) ); - ++it; - } - enableActions(); - m_pList->startProptimer(); -} - -/*! - \fn tdesvnfilelist::slotClientException(const TQString&) - */ -void tdesvnfilelist::slotClientException(const TQString&what) -{ - emit sigLogMessage(what); - KMessageBox::sorry(TQT_TQWIDGET(KApplication::activeModalWidget()),what,i18n("SVN Error")); -} - - -/*! - \fn tdesvnfilelist::slotNotifyMessage(const TQString&) - */ -void tdesvnfilelist::slotNotifyMessage(const TQString&what) -{ - emit sigLogMessage(what); - kapp->tqprocessEvents(20); -} - -void tdesvnfilelist::slotChangeToRepository() -{ - if (!isWorkingCopy()) { - return; - } - FileListViewItem*k = static_cast<FileListViewItem*>(firstChild()); - /* huh... */ - if (!k) return; - svn::InfoEntry i; - if (!m_SvnWrapper->singleInfo(k->Url(),svn::Revision::UNDEFINED,i)) { - return; - } - if (i.reposRoot().isEmpty()) { - KMessageBox::sorry(TQT_TQWIDGET(KApplication::activeModalWidget()),i18n("Could not retrieve repository of working copy."),i18n("SVN Error")); - } else { - sigSwitchUrl(i.reposRoot()); - } -} - -void tdesvnfilelist::slotItemDoubleClicked(TQListViewItem*item) -{ - if (!item) return; - - FileListViewItem*fki = static_cast<FileListViewItem*>(item); - if (fki->isDir()) { - if (fki->isOpen()) { - fki->setOpen(false); - } else { - fki->setOpen(true); - } - return; - } - svn::Revision rev(isWorkingCopy()?svn::Revision::UNDEFINED:m_pList->m_remoteRevision); - TQString feditor = Kdesvnsettings::external_display(); - if ( feditor.compare("default") == 0 ) { - KURL::List lst; - lst.append(fki->kdeName(rev)); - KTrader::OfferList li = offersList(fki,true); - if (li.count()==0||li.first()->exec().isEmpty()) { - li = offersList(fki); - } - if (li.count()>0&&!li.first()->exec().isEmpty()) { - KService::Ptr ptr = li.first(); - KRun::run( *ptr, lst); - } else { - KRun::displayOpenWithDialog(lst); - } - } else { - if ( KRun::runCommand(feditor + " " + fki->kdeName(rev).prettyURL()) <= 0) { - KMessageBox::error(this,i18n("Failed: %1 %2").tqarg(feditor).tqarg(fki->fullName())); - } - } -} - -void tdesvnfilelist::slotCleanupAction() -{ - if (!isWorkingCopy()) return; - FileListViewItem*which= singleSelected(); - if (!which) which = static_cast<FileListViewItem*>(firstChild()); - if (!which||!which->isDir()) return; - if (m_SvnWrapper->makeCleanup(which->fullName())) { - which->refreshtqStatus(true); - } -} - -void tdesvnfilelist::slotResolved() -{ - if (!isWorkingCopy()) return; - FileListViewItem*which= singleSelected(); - if (!which) which = static_cast<FileListViewItem*>(firstChild()); - if (!which) return; - m_SvnWrapper->slotResolved(which->fullName()); - which->refreshtqStatus(true); - slotRescanIcons(false); -} - -void tdesvnfilelist::slotTryResolve() -{ - if (!isWorkingCopy()) return; - FileListViewItem*which= singleSelected(); - if (!which || which->isDir()) { - return; - } - m_SvnWrapper->slotResolve(which->fullName()); -} - -template<class T> KDialogBase* tdesvnfilelist::createDialog(T**ptr,const TQString&_head,bool OkCancel,const char*name,bool showHelp) -{ - int buttons = KDialogBase::Ok; - if (OkCancel) { - buttons = buttons|KDialogBase::Cancel; - } - if (showHelp) { - buttons = buttons|KDialogBase::Help; - } - KDialogBase * dlg = new KDialogBase( - TQT_TQWIDGET(TQT_TQWIDGET(KApplication::activeModalWidget())), - name, - true, - _head, - buttons); - - if (!dlg) return dlg; - TQWidget* Dialog1Layout = dlg->makeVBoxMainWidget(); - *ptr = new T(Dialog1Layout); - dlg->resize(dlg->configDialogSize(*(Kdesvnsettings::self()->config()),name?name:"standard_size")); - return dlg; -} - -void tdesvnfilelist::slotImportDirsIntoCurrent() -{ - slotImportIntoCurrent(true); -} - -/*! - \fn tdesvnfilelist::slotImportIntoCurrent() - */ -void tdesvnfilelist::slotImportIntoCurrent(bool dirs) -{ - if (allSelected()->count()>1) { - KMessageBox::error(this,i18n("Cannot import into multiple targets!")); - return; - } - TQString targetUri; - if (allSelected()->count()==0) { - targetUri=baseUri(); - } else { - targetUri = allSelected()->at(0)->Url(); - } - KURL uri; - if (dirs) uri = KFileDialog::getExistingDirectory(TQString(),this,"Import files from folder"); - else uri = KFileDialog::getImageOpenURL(TQString(),this,"Import file"); - - if (uri.url().isEmpty()) return; - - if ( !uri.protocol().isEmpty() && uri.protocol()!="file") { - KMessageBox::error(this,i18n("Cannot import into remote targets!")); - return; - } - slotImportIntoDir(uri,targetUri,dirs); -} - -void tdesvnfilelist::slotImportIntoDir(const KURL&importUrl,const TQString&target,bool dirs) -{ - Logmsg_impl*ptr; - Importdir_logmsg*ptr2 = 0; - - KDialogBase*dlg; - KURL uri = importUrl; - TQString targetUri = target; - while (targetUri.endsWith("/")) { - targetUri.truncate(targetUri.length()-1); - } - - if (dirs) { - dlg = createDialog(&ptr2,TQString(i18n("Import log")),true,"import_log_msg"); - ptr = ptr2; - ptr2->createDirboxDir("\""+uri.fileName(true)+"\""); - } else { - dlg = createDialog(&ptr,TQString(i18n("Import log")),true,"import_log_msg"); - } - - if (!dlg) return; - - ptr->initHistory(); - if (dlg->exec()!=TQDialog::Accepted) { - ptr->saveHistory(true); - dlg->saveDialogSize(*(Kdesvnsettings::self()->config()),"import_log_msg",false); - delete dlg; - return; - } - dlg->saveDialogSize(*(Kdesvnsettings::self()->config()),"import_log_msg",false); - - TQString logMessage = ptr->getMessage(); - svn::Depth rec = ptr->getDepth(); - ptr->saveHistory(false); - uri.setProtocol(""); - TQString iurl = uri.path(); - while (iurl.endsWith("/")) { - iurl.truncate(iurl.length()-1); - } - - if (dirs && ptr2 && ptr2->createDir()) { - targetUri+= "/"+uri.fileName(true); - } - if (ptr2) { - m_SvnWrapper->slotImport(iurl,targetUri,logMessage,rec,ptr2->noIgnore(),ptr2->ignoreUnknownNodes()); - } else { - m_SvnWrapper->slotImport(iurl,targetUri,logMessage,rec,false,false); - } - - if (!isWorkingCopy()) { - if (allSelected()->count()==0) { - refreshCurrentTree(); - } else { - refreshCurrent(allSelected()->at(0)); - } - } - delete dlg; -} - -void tdesvnfilelist::readSupportData() -{ - /// this moment empty cause no usagedata explicit used by tdesvnfilelist -} - -void tdesvnfilelist::refreshCurrentTree() -{ - TQTime t; - t.start(); - FileListViewItem*item = static_cast<FileListViewItem*>(firstChild()); - if (!item) return; - //m_pList->stopScan(); - m_pList->m_fileTip->setItem(0); - kapp->processEvents(); - setUpdatesEnabled(false); - if (item->fullName()==baseUri()) { - if (!refreshItem(item)) { - setUpdatesEnabled(true); - viewport()->tqrepaint(); - return; - } else { - refreshRecursive(item); - } - } else { - refreshRecursive(0); - } - if (isWorkingCopy()) { - m_SvnWrapper->createModifiedCache(baseUri()); - } - kdDebug()<<"Refresh time: "<<t.elapsed()<<" ms"<<endl; - setUpdatesEnabled(true); - viewport()->tqrepaint(); - TQTimer::singleShot(1,this,TQT_SLOT(readSupportData())); - //m_pList->startScan(); -} - -void tdesvnfilelist::refreshCurrent(SvnItem*cur) -{ - if (!cur||!cur->fItem()) { - refreshCurrentTree(); - return; - } - kapp->processEvents(); - setUpdatesEnabled(false); - refreshRecursive(cur->fItem()); - setUpdatesEnabled(true); - viewport()->tqrepaint(); -} - -bool tdesvnfilelist::refreshRecursive(FileListViewItem*_parent,bool down) -{ - FileListViewItem*item; - if (_parent) { - item = static_cast<FileListViewItem*>(_parent->firstChild()); - } else { - item = static_cast<FileListViewItem*>(firstChild()); - } - - if (!item) return false; - kapp->processEvents(); - - FileListViewItemList currentSync; - currentSync.setAutoDelete(false); - - while (item) { - currentSync.append(item); - item = static_cast<FileListViewItem*>(item->nextSibling()); - } - - TQString what = (_parent!=0?_parent->fullName():baseUri()); - svn::StatusEntries dlist; - - if (!m_SvnWrapper->maketqStatus(what,dlist,m_pList->m_remoteRevision)) { - kdDebug()<<"Fehler bei makestatus fuer "<<what <<endl; - return false; - } - if (isWorkingCopy()) { - svn::StatusEntries neweritems; - m_SvnWrapper->getaddedItems(what,neweritems); - dlist+=neweritems; - } - - svn::StatusEntries::iterator it = dlist.begin(); - FileListViewItem*k; - bool gotit = false; - bool dispchanged = false; - for (;it!=dlist.end();++it) { - gotit = false; - if ((*it)->path()==what) { - continue; - } - FileListViewItemListIterator clistIter(currentSync); - while ( (k=clistIter.current()) ) { - ++clistIter; - if (k->fullName()==(*it)->path()) { - currentSync.removeRef(k); - k->updatetqStatus(*it); - if (filterOut(k)) { - dispchanged=true; - delete k; - } - gotit = true; - break; - } - } - if (!gotit &&!filterOut((*it)) ) { - dispchanged = true; - FileListViewItem * item; - if (!_parent) { - item = new FileListViewItem(this,*it); - } else { - item = new FileListViewItem(this,_parent,*it); - } - if (item->isDir()) { - m_Dirsread[item->fullName()]=false; - item->setDropEnabled(true); - } - if (isWorkingCopy()) { - if (item->isDir()) { - m_pList->m_DirWatch->addDir(item->fullName()); - } else { - m_pList->m_DirWatch->addFile(item->fullName()); - } - } - } - } - FileListViewItemListIterator dIter(currentSync); -#ifndef NDEBUG - slotSelectionChanged(); - kdDebug() << "Selected items " << m_SelectedItems->count()<< endl; -#endif - while ( (k=dIter.current()) ) { - ++dIter; - delete k; - // @todo just for debugging! -#ifndef NDEBUG - m_SelectedItems->clear(); - TQListViewItemIterator qlvit( this, TQListViewItemIterator::Selected ); - while ( qlvit.current() ) { - m_SelectedItems->append( static_cast<FileListViewItem*>(qlvit.current()) ); - ++qlvit; - } - kdDebug() << "Selected items " << m_SelectedItems->count() << endl; -#endif - } - if (_parent) { - item = static_cast<FileListViewItem*>(_parent->firstChild()); - } else { - item = static_cast<FileListViewItem*>(firstChild()); - } - if (!down) { - return dispchanged; - } - while (item) { - if (item->isDir()) { - if ((m_Dirsread.find(item->fullName())!=m_Dirsread.end()&&m_Dirsread[item->fullName()]==true)) { - if (item->childCount()==0) { - checkDirs(item->fullName(),item); - dispchanged = true; - } else { - dispchanged = refreshRecursive(item)?true:dispchanged; - } - } - } - item = static_cast<FileListViewItem*>(item->nextSibling()); - } - return dispchanged; -} - -KTrader::OfferList tdesvnfilelist::offersList(SvnItem*item,bool execOnly) -{ - KTrader::OfferList offers; - if (!item) { - return offers; - } - TQString constraint; - if (execOnly) { - constraint = "Type == 'Application' or (exist Exec)"; - } else { - constraint = "Type == 'Application'"; - } - offers = KTrader::self()->query(item->mimeType()->name(), constraint); - - return offers; -} - -void tdesvnfilelist::slotContextMenuRequested(TQListViewItem */* _item */, const TQPoint &, int) -{ -// FileListViewItem*item = static_cast<FileListViewItem*>(_item); - bool isopen = baseUri().length()>0; - SvnItemList l; - SelectionList(&l); - - TQString menuname; - - if (!isopen) { - menuname="empty"; - } else if (isWorkingCopy()) { - menuname="local"; - } else { - menuname="remote"; - } - if (l.count()==0) { - menuname+="_general"; - } else if (l.count()>1){ - menuname+="_context_multi"; - } else { - menuname+="_context_single"; - if (isWorkingCopy()) { - if (l.at(0)->isRealVersioned()) { - if (l.at(0)->isConflicted()) { - menuname+="_conflicted"; - } else { - menuname+="_versioned"; - if (l.at(0)->isDir()) { - menuname+="_dir"; - } - } - } else { - menuname+="_unversioned"; - } - } else if (l.at(0)->isDir()) { - menuname+="_dir"; - } - } - - TQWidget * target; - emit sigShowPopup(menuname,&target); - TQPopupMenu *popup = static_cast<TQPopupMenu *>(target); - if (!popup) { - kdDebug()<<"Error getting popupMenu"<<endl; - return; - } - - KTrader::OfferList offers; - OpenContextmenu*me=0; - KAction*temp = 0; - - int id = -1; - - if (l.count()==1) offers = offersList(l.at(0)); - - if (l.count()==1&&!l.at(0)->isDir()) { - temp = filesActions()->action("openwith"); - if (offers.count()>0) { - svn::Revision rev(isWorkingCopy()?svn::Revision::UNDEFINED:m_pList->m_remoteRevision); - me= new OpenContextmenu(l.at(0)->kdeName(rev),offers,0,0); - id = popup->insertItem(i18n("Open With..."),me); - } else { - temp = filesActions()->action("openwith"); - if (temp) { - temp->plug(popup); - } - } - } - popup->exec(TQCursor::pos()); - if (id>-1) { - popup->removeItem(id); - } - delete me; - if (temp) { - temp->unplug(popup); - } -} - -/** -* Overridden virtuals for TQt drag 'n drop (XDND) -*/ -void tdesvnfilelist::contentsDragEnterEvent(TQDragEnterEvent *event) -{ - TQListViewItem*item; - bool ok = validDropEvent(event,item); - if (ok) { - event->accept(); - } else { - event->ignore(); - } -} - -//void tdesvnfilelist::startDrag() -TQDragObject* tdesvnfilelist::dragObject() -{ - m_pList->m_fileTip->setItem(0); - TQListViewItem * m_pressedItem = currentItem(); - if (!m_pressedItem) { - return 0; - } - TQPixmap pixmap2; - KURL::List urls = selectedUrls(); - if (urls.count()==0) { - return 0; - } - if (!viewport()->hasFocus()) { - kdDebug()<<"Set focus"<<endl; - viewport()->setFocus(); - } - kdDebug() << "dragObject: " << urls << endl; - bool pixmap0Invalid = !m_pressedItem->pixmap(0) || m_pressedItem->pixmap(0)->isNull(); - if (( urls.count() > 1 ) || (pixmap0Invalid)) { - int iconSize = Kdesvnsettings::listview_icon_size();; - iconSize = iconSize ? iconSize : tdesvnPartFactory::instance()->iconLoader()->currentSize( KIcon::Small ); // Default = small - pixmap2 = DesktopIcon( "kmultiple", iconSize ); - if ( pixmap2.isNull() ) { - kdWarning() << "Could not find multiple pixmap" << endl; - } - } - - KURLDrag *drag; - drag = new KURLDrag(urls,viewport()); - - /* workaround for KURL::Drag - it always forget the revision part on drop :( */ - if (!isWorkingCopy()) { - TQStrList l; - TQString t; - KURL::List::ConstIterator it = urls.begin(); - for (;it!=urls.end();++it) { - l.append((*it).prettyURL()); - } - drag->setUris(l); - } - - drag->setExportAsText(true); - if ( !pixmap2.isNull() ) - drag->setPixmap( pixmap2 ); - else if ( !pixmap0Invalid ) - drag->setPixmap( *m_pressedItem->pixmap( 0 ) ); - - return drag; -} - -void tdesvnfilelist::contentsDragLeaveEvent( TQDragLeaveEvent * ) -{ - cleanHighLighter(); -} - -bool tdesvnfilelist::acceptDrag(TQDropEvent *event)const -{ - return KURLDrag::canDecode(event); -} - -bool tdesvnfilelist::validDropEvent(TQDropEvent*event,TQListViewItem*&item) -{ - if (!event) return false; - if (!isWorkingCopy()) { - if (m_pList->m_remoteRevision!=svn::Revision::HEAD) { - item = 0; - return false; - } - } - bool ok = false; - item = 0; - if (KURLDrag::canDecode(event)) { - KURL::List urlList; - KURLDrag::decode( event, urlList ); - int count = urlList.count(); - if (count>0) { - if (baseUri().length()==0) { - ok = true; - } else { - TQPoint vp = contentsToViewport( event->pos() ); - item = isExecuteArea( vp ) ? itemAt( vp ) : 0L; - FileListViewItem*which=static_cast<FileListViewItem*>(item); - if (!isWorkingCopy()) { - if (event->source()!=viewport()){ - ok = (!item || (which->isDir()))&&urlList[0].isLocalFile()&&count==1; - } else { - ok = (!item || (which->isDir() )); - } - } else { - ok = (which && (which->isDir())); - } - } - } - } - return ok; -} - -void tdesvnfilelist::contentsDropEvent(TQDropEvent * event) -{ - TQListViewItem *item = 0; - bool ok = validDropEvent(event,item); - cleanHighLighter(); - if (ok) { - dropped(event,item); - } else { - event->ignore(); - } -} - -void tdesvnfilelist::contentsDragMoveEvent( TQDragMoveEvent* event) -{ - TQListViewItem * item; - bool ok = validDropEvent(event,item); - - if (item && item!=m_pList->dragOverItem) { - TQPoint vp = contentsToViewport( event->pos() ); - m_pList->dragOverItem=item; - m_pList->dragOverPoint = vp; - TQRect tmpRect = drawItemHighlighter(0, m_pList->dragOverItem); - if (tmpRect!=m_pList->mOldDropHighlighter) { - cleanHighLighter(); - m_pList->mOldDropHighlighter=tmpRect; - viewport()->tqrepaint(tmpRect); - kapp->processEvents(); - } - } - if (ok) { - event->accept(); - } else { - event->ignore(); - } -} - -void tdesvnfilelist::viewportPaintEvent(TQPaintEvent *ev) -{ - KListView::viewportPaintEvent(ev); - if (m_pList->mOldDropHighlighter.isValid() && ev->rect().intersects(m_pList->mOldDropHighlighter)) { - TQPainter painter(viewport()); - tqstyle().tqdrawPrimitive(TQStyle::PE_FocusRect, &painter, m_pList->mOldDropHighlighter, tqcolorGroup(), - TQStyle::Style_FocusAtBorder); - } -} - -void tdesvnfilelist::cleanHighLighter() -{ - if (m_pList->mOldDropHighlighter.isValid()) { - TQRect rect=m_pList->mOldDropHighlighter; - m_pList->mOldDropHighlighter=TQRect(); - viewport()->tqrepaint(rect, true); - } -} - -/*! - \fn tdesvnfilelist::slotMergeRevisions() - */ -void tdesvnfilelist::slotMergeRevisions() -{ - if (!isWorkingCopy()) return; - FileListViewItem*which= singleSelected(); - if (!which) { - return; - } - bool force,dry,rec,irelated,useExternal; - Rangeinput_impl::revision_range range; - if (!MergeDlg_impl::getMergeRange(range,&force,&rec,&irelated,&dry,&useExternal,this,"merge_range")) { - return; - } - if (!useExternal) { - m_SvnWrapper->slotMergeWcRevisions(which->fullName(),range.first,range.second,rec,!irelated,force,dry); - } else { - m_SvnWrapper->slotMergeExternal(which->fullName(),which->fullName(),which->fullName(),range.first,range.second, - isWorkingCopy()?svn::Revision::WORKING:m_pList->m_remoteRevision,rec); - } - refreshItem(which); - refreshRecursive(which); -} - -void tdesvnfilelist::slotMerge() -{ - FileListViewItem*which= singleSelected(); - TQString src1,src2,target; - if (isWorkingCopy()) { - if (m_pList->merge_Target.isEmpty()) { - target = which?which->fullName():baseUri(); - } else { - target = m_pList->merge_Target; - } - src1 = m_pList->merge_Src1; - } else { - if (m_pList->merge_Src1.isEmpty()){ - src1 = which?which->fullName():baseUri(); - } else { - src1 = m_pList->merge_Src1; - } - target = m_pList->merge_Target; - } - src2 = m_pList->merge_Src2; - bool force,dry,rec,irelated,useExternal; - Rangeinput_impl::revision_range range; - MergeDlg_impl*ptr; - KDialogBase*dlg = createDialog(&ptr,TQString(i18n("Merge")),true,"merge_dialog",true); - if (!dlg) { - return; - } - dlg->setHelp("merging-items","tdesvn"); - ptr->setDest(target); - ptr->setSrc1(src1); - ptr->setSrc2(src1); - if (dlg->exec()==TQDialog::Accepted) { - src1=ptr->Src1(); - src2=ptr->Src2(); - if (src2.isEmpty()) { - src2 = src1; - } - target = ptr->Dest(); - m_pList->merge_Src2 = src2; - m_pList->merge_Src1 = src1; - m_pList->merge_Target = target; - force = ptr->force(); - dry = ptr->dryrun(); - rec = ptr->recursive(); - irelated = ptr->ignorerelated(); - useExternal = ptr->useExtern(); - range = ptr->getRange(); - if (!useExternal) { - m_SvnWrapper->slotMerge(src1,src2,target,range.first,range.second, - isWorkingCopy()?svn::Revision::WORKING:m_pList->m_remoteRevision, - rec,!irelated,force,dry); - } else { - m_SvnWrapper->slotMergeExternal(src1,src2,target,range.first,range.second, - isWorkingCopy()?svn::Revision::WORKING:m_pList->m_remoteRevision,rec); - } - if (isWorkingCopy()) { -// refreshItem(which); -// refreshRecursive(which); - refreshCurrentTree(); - } - } - - dlg->saveDialogSize(*(Kdesvnsettings::self()->config()),"merge_dialog",false); - - delete dlg; -} - -void tdesvnfilelist::slotDropped(TQDropEvent* event,TQListViewItem*item) -{ - KURL::List urlList; - TQMap<TQString,TQString> metaData; - TQDropEvent::Action action = event->action(); - if (!event || m_pList->intern_dropRunning||!KURLDrag::decode( event, urlList, metaData)||urlList.count()<1) { - return; - } - kdDebug()<<"slotDropped"<<endl; - TQString tdir; - if (item) { - FileListViewItem*which = static_cast<FileListViewItem*>(item); - clearSelection(); - which->setSelected(true); - kapp->processEvents(); - tdir = which->fullName(); - } else { - tdir = baseUri(); - } - - if (event->source()!=viewport()) { - kdDebug()<<"Dropped from outside" << endl; - if (baseUri().length()==0) { - openURL(urlList[0]); - event->acceptAction(); - return; - } - if (baseUri().length()>0 /*&& urlList[0].isLocalFile()*/) { - TQString path = urlList[0].path(); - TQFileInfo fi(path); - if (!isWorkingCopy()) { - slotImportIntoDir(urlList[0],tdir,fi.isDir()); - } else { - //m_pList->stopScan(); - KIO::Job * job = 0L; - job = KIO::copy(urlList,tdir); - connect( job, TQT_SIGNAL( result( KIO::Job * ) ),TQT_SLOT( slotCopyFinished( KIO::Job * ) ) ); - dispDummy(); - event->acceptAction(); - return; - } - } - } else { - kdDebug()<<"Dropped from inside " << action << endl; - int root_x, root_y, win_x, win_y; - uint keybstate; - TQDropEvent::Action action = TQDropEvent::UserAction; - KeyState::keystate(&root_x,&root_y,&win_x,&win_y,&keybstate); - if (keybstate&TQt::ControlButton) { - kdDebug()<<"Control pressed" << endl; - action = TQDropEvent::Copy; - } else if (keybstate&TQt::ShiftButton) { - kdDebug()<<"Shift pressed" << endl; - action = TQDropEvent::Move; - } - /* converting urls to interal style */ - TQString nProto; - if (isWorkingCopy()) { - nProto=""; - } else { - nProto = svn::Url::transformProtokoll(urlList[0].protocol()); - } - KURL::List::Iterator it = urlList.begin(); - TQStringList l; - for (;it!=urlList.end();++it) { - l = TQStringList::split("?",(*it).prettyURL()); - if (l.size()>1) { - (*it) = l[0]; - } else if (isWorkingCopy()) - { - (*it) = KURL::fromPathOrURL( (*it).path()); - } - (*it).setProtocol(nProto); - kdDebug()<<"Dropped: "<<(*it)<<endl; - } - event->acceptAction(); - m_pList->intern_dropRunning=true; - m_pList->intern_drops = urlList; - m_pList->intern_drop_target=tdir; - m_pList->intern_drop_action=action; - m_pList->intern_drop_pos=TQCursor::pos(); - TQTimer::singleShot(0,this,TQT_SLOT(slotInternalDrop())); - -// internalDrop(action,urlList,tdir); - } -} - -void tdesvnfilelist::slotInternalDrop() -{ - TQDropEvent::Action action = m_pList->intern_drop_action; - if (action==TQDropEvent::UserAction) { - TQPopupMenu popup; - popup.insertItem(SmallIconSet("goto"), i18n( "Move Here" ) + "\t" + KKey::modFlagLabel( KKey::SHIFT ), 2 ); - popup.insertItem(SmallIconSet("editcopy"), i18n( "Copy Here" ) + "\t" + KKey::modFlagLabel( KKey::CTRL ), 1 ); - popup.insertSeparator(); - popup.insertItem(SmallIconSet("cancel"), i18n( "Cancel" ) + "\t" + KKey( TQt::Key_Escape ).toString(), 5); - int result = popup.exec(m_pList->intern_drop_pos); - switch (result) { - case 1 : action = TQDropEvent::Copy; break; - case 2 : action = TQDropEvent::Move; break; - default: - { - m_pList->intern_dropRunning=false; - return; - } - } - } - if (action==TQDropEvent::Move) { - m_SvnWrapper->makeMove(m_pList->intern_drops,m_pList->intern_drop_target,false); - } else { - m_SvnWrapper->makeCopy(m_pList->intern_drops,m_pList->intern_drop_target,svn::Revision::HEAD); - } - m_pList->intern_dropRunning=false; - refreshCurrentTree(); -} - -/*! - \fn tdesvnfilelist::slotRename() - */ -void tdesvnfilelist::slotRename() -{ - copy_move(true); -} -void tdesvnfilelist::slotCopy() -{ - copy_move(false); -} - -void tdesvnfilelist::copy_move(bool move) -{ - if (isWorkingCopy()&&singleSelected()==firstChild()) { - return; - } - bool ok, force; - FileListViewItem*which = singleSelected(); - if (!which) return; - TQString nName = CopyMoveView_impl::getMoveCopyTo(&ok,&force,move, - which->fullName(),baseUri(),this,"move_name"); - if (!ok) { - return; - } - if (move) { - m_SvnWrapper->makeMove(which->fullName(),nName,force); - } else { - m_SvnWrapper->makeCopy(which->fullName(),nName, isWorkingCopy()?svn::Revision::HEAD:m_pList->m_remoteRevision); - } -} - -void tdesvnfilelist::slotCat() -{ - FileListViewItem*k = singleSelected(); - if (!k) return; - m_SvnWrapper->slotMakeCat(isWorkingCopy()?svn::Revision::HEAD:m_pList->m_remoteRevision, k->fullName(),k->text(0), - isWorkingCopy()?svn::Revision::HEAD:m_pList->m_remoteRevision,0); -} - - -/*! - \fn tdesvnfilelist::slotCopyFinished( KIO::Job *) - */ -void tdesvnfilelist::slotCopyFinished( KIO::Job * job) -{ - if (m_pList->m_DirWatch) { - m_pList->m_DirWatch->startScan(false); - } - if (job) { - bool ok = true; - tqApp->exit_loop(); - if (job->error()) { - job->showErrorDialog(this); - ok = false; - } - // always just connect a CopyJob here!!!! - if (ok) { - KURL::List lst = static_cast<KIO::CopyJob*>(job)->srcURLs(); - KURL turl = static_cast<KIO::CopyJob*>(job)->destURL(); - TQString base = turl.path(1); - KURL::List::iterator iter; - TQValueList<svn::Path> tmp; - for (iter=lst.begin();iter!=lst.end();++iter) { - tmp.push_back(svn::Path((base+(*iter).fileName(true)))); - } - m_SvnWrapper->addItems(tmp,svn::DepthInfinity); - } - refreshCurrentTree(); - } -} - - - -/*! - \fn tdesvnfilelist::slotDelete() - */ -void tdesvnfilelist::slotDelete() -{ - m_deletePerfect = true; - TQPtrList<FileListViewItem>*lst = allSelected(); - - if (lst->count()==0) { - KMessageBox::error(this,i18n("Nothing selected for delete")); - return; - } - FileListViewItemListIterator liter(*lst); - FileListViewItem*cur; - //m_pList->stopScan(); - m_pList->m_fileTip->setItem(0); - - TQValueList<svn::Path> items; - TQStringList displist; - KURL::List kioList; - while ((cur=liter.current())!=0){ - ++liter; - if (!cur->isRealVersioned()) { - KURL _uri; _uri.setPath(cur->fullName()); - kioList.append(_uri); - } else { - items.push_back(cur->fullName()); - } - displist.append(cur->fullName()); - } - int answer = KMessageBox::questionYesNoList(this,i18n("Really delete these entries?"),displist,i18n("Delete from repository")); - if (answer!=KMessageBox::Yes) { - return; - } - if (kioList.count()>0) { - KIO::Job*aJob = KIO::del(kioList); - connect(aJob,TQT_SIGNAL(result (KIO::Job *)),this,TQT_SLOT(slotDeleteFinished(KIO::Job*))); - dispDummy(); - } - if (m_deletePerfect && items.size()>0) { - m_SvnWrapper->makeDelete(items); - } - refreshCurrentTree(); - //m_pList->startScan(); -} - -/*! - \fn tdesvnfilelist::slotDeleteFinished(KIO::Job*) - */ -void tdesvnfilelist::slotDeleteFinished(KIO::Job*job) -{ - if (job) { - tqApp->exit_loop(); - if (job->error()) { - job->showErrorDialog(this); - m_deletePerfect = false; - } - } -} - -/*! - \fn tdesvnfilelist::dispDummy() - */ -void tdesvnfilelist::dispDummy() -{ - // wait for job - TQLabel dummy(this,0,WStyle_NoBorder|WShowModal); - TQSize csize = size(); - dummy.setText(i18n("Please wait until job is finished")); - dummy.resize(dummy.tqminimumSizeHint()); - if (dummy.width()<=width()&&dummy.height()<=height()) { - dummy.move(csize.width()/2-dummy.width()/2,csize.height()/2-dummy.height()/2); - } - dummy.show(); - tqApp->enter_loop(); - dummy.hide(); -} - - -/*! - \fn tdesvnfilelist::slotLock() - */ -void tdesvnfilelist::slotLock() -{ - TQPtrList<FileListViewItem>*lst = allSelected(); - FileListViewItemListIterator liter(*lst); - FileListViewItem*cur; - if (lst->count()==0) { - KMessageBox::error(this,i18n("Nothing selected for lock")); - return; - } - KDialogBase*dlg; - Logmsg_impl*ptr; - dlg = createDialog(&ptr,TQString(i18n("Lock message")),true,"locking_log_msg"); - if (!dlg) return; - ptr->initHistory(); - ptr->hideDepth(true); - TQCheckBox*_stealLock = new TQCheckBox("",ptr,"create_dir_checkbox"); - _stealLock->setText(i18n("Steal lock?")); - ptr->addItemWidget(_stealLock); - ptr->m_keepLocksButton->hide(); - - if (dlg->exec()!=TQDialog::Accepted) { - ptr->saveHistory(true); - delete dlg; - return; - } - dlg->saveDialogSize(*(Kdesvnsettings::self()->config()),"locking_log_msg",false); - - TQString logMessage = ptr->getMessage(); - bool steal = _stealLock->isChecked(); - ptr->saveHistory(false); - - TQStringList displist; - while ((cur=liter.current())!=0){ - ++liter; - displist.append(cur->fullName()); - } - m_SvnWrapper->makeLock(displist,logMessage,steal); - refreshCurrentTree(); -} - - -/*! - \fn tdesvnfilelist::slotUnlock() - */ -void tdesvnfilelist::slotUnlock() -{ - TQPtrList<FileListViewItem>*lst = allSelected(); - FileListViewItemListIterator liter(*lst); - FileListViewItem*cur; - if (lst->count()==0) { - KMessageBox::error(this,i18n("Nothing selected for unlock")); - return; - } - int res = KMessageBox::questionYesNoCancel(this,i18n("Break lock or ignore missing locks?"),i18n("Unlocking items")); - if (res == KMessageBox::Cancel) { - return; - } - bool breakit = res==KMessageBox::Yes; - - TQStringList displist; - while ((cur=liter.current())!=0){ - ++liter; - displist.append(cur->fullName()); - } - m_SvnWrapper->makeUnlock(displist,breakit); - refreshCurrentTree(); -} - - -/*! - \fn tdesvnfilelist::slotIgnore() - */ -void tdesvnfilelist::slotIgnore() -{ - SvnItem*item = singleSelected(); - if (!item || item->isRealVersioned()) return; - if (m_SvnWrapper->makeIgnoreEntry(item,item->isIgnored())) { - refreshCurrentTree(); - } -} - - -/*! - \fn tdesvnfilelist::slotBlame() - */ -void tdesvnfilelist::slotBlame() -{ - SvnItem*k = singleSelected(); - if (!k) return; - svn::Revision start(svn::Revision::START); - svn::Revision end(svn::Revision::HEAD); - m_SvnWrapper->makeBlame(start,end,k); -} - - -/*! - \fn tdesvnfilelist::slotRangeBlame() - */ -void tdesvnfilelist::slotRangeBlame() -{ - SvnItem*k = singleSelected(); - if (!k) return; - Rangeinput_impl*rdlg; - KDialogBase*dlg = createDialog(&rdlg,TQString(i18n("Revisions")),true,"revisions_dlg"); - if (!dlg) { - return; - } - if (dlg->exec()==TQDialog::Accepted) { - Rangeinput_impl::revision_range r = rdlg->getRange(); - m_SvnWrapper->makeBlame(r.first,r.second,k); - } - dlg->saveDialogSize(*(Kdesvnsettings::self()->config()),"revisions_dlg",false); - delete dlg; -} - - -void tdesvnfilelist::slotSimpleBaseDiff() -{ - FileListViewItem*kitem = singleSelected(); - if (isWorkingCopy()) - { - chdir(baseUri().local8Bit()); - } - - TQString what; - if (!kitem) { - what=="."; - } else { - what = relativePath(kitem); - } - // only possible on working copies - so we may say this values - m_SvnWrapper->makeDiff(what,svn::Revision::BASE,svn::Revision::WORKING,svn::Revision::UNDEFINED,kitem?kitem->isDir():true); -} - -void tdesvnfilelist::slotSimpleHeadDiff() -{ - FileListViewItem*kitem = singleSelected(); - TQString what; - if (isWorkingCopy()) - { - chdir(baseUri().local8Bit()); - } - - if (!kitem) { - what="."; - }else{ - what = relativePath(kitem); - } - // only possible on working copies - so we may say this values - m_SvnWrapper->makeDiff(what,svn::Revision::WORKING,svn::Revision::HEAD,svn::Revision::UNDEFINED,kitem?kitem->isDir():true); -} - -void tdesvnfilelist::slotDisplayLastDiff() -{ - FileListViewItem*kitem = singleSelected(); - TQString what; - if (isWorkingCopy()) - { - chdir(baseUri().local8Bit()); - } - svn::Revision end = svn::Revision::PREV; - if (!kitem) { - if (isWorkingCopy()) { - TQListViewItem*fi = firstChild(); - kitem = static_cast<FileListViewItem*>(fi); - if (!kitem) { - return; - } - what = relativePath(kitem); - } else { - what=baseUri(); - } - }else{ - what = relativePath(kitem); - } - svn::Revision start; - svn::InfoEntry inf; - if (!kitem) { - // it has to have an item when in working copy, so we know we are in repository view. - if (!m_SvnWrapper->singleInfo(what,m_pList->m_remoteRevision,inf)) { - return; - } - start = inf.cmtRev(); - } else { - start = kitem->cmtRev(); - } - if (!isWorkingCopy()) { - if (!m_SvnWrapper->singleInfo(what,start.revnum()-1,inf)) { - return; - } - end = inf.cmtRev(); - } - m_SvnWrapper->makeDiff(what,end,what,start,realWidget()); -} - -void tdesvnfilelist::slotDiffPathes() -{ - TQPtrList<FileListViewItem>*lst = allSelected(); - - if (lst->count()!=2 || !uniqueTypeSelected()) { - return; - } - m_pList->m_fileTip->setItem(0); - - FileListViewItem*k1,*k2; - k1 = lst->at(0); - k2 = lst->at(1); - TQString w1,w2; - svn::Revision r1; - - if (isWorkingCopy()) { - chdir(baseUri().local8Bit()); - w1 = relativePath(k1); - w2 = relativePath(k2); - r1 = svn::Revision::WORKING; - } else { - w1 = k1->fullName(); - w2 = k2->fullName(); - r1 = m_pList->m_remoteRevision; - } - m_SvnWrapper->makeDiff(w1,r1,w2,r1); -} - -/*! - \fn tdesvnfilelist::slotMkdir() - */ -void tdesvnfilelist::slotMkdir() -{ - SvnItem*k = singleSelected(); - TQString parentDir; - if (k) { - if (!k->isDir()) { - KMessageBox::sorry(0,i18n("May not make subdirs of a file")); - return; - } - parentDir=k->fullName(); - } else { - parentDir=baseUri(); - } - TQString ex = m_SvnWrapper->makeMkdir(parentDir); - if (!ex.isEmpty()) { - slotDirAdded(ex,static_cast<FileListViewItem*>(k)); - } -} - -void tdesvnfilelist::slotMkBaseDirs() -{ - bool isopen = baseUri().length()>0; - if (!isopen) { - return; - } - TQString parentDir=baseUri(); - TQStringList targets; - targets.append(parentDir+"/trunk"); - targets.append(parentDir+"/branches"); - targets.append(parentDir+"/tags"); - TQString msg = i18n("Automatic generated base tqlayout by tdesvn"); - isopen = m_SvnWrapper->makeMkdir(targets,msg); - if (isopen) { - slotDirAdded(targets[0],0); -// slotDirAdded(targets[1],0); -// slotDirAdded(targets[2],0); - } -} - -/*! - \fn tdesvnfilelist::slotDiffRevisions() - */ -void tdesvnfilelist::slotDiffRevisions() -{ - SvnItem*k = singleSelected(); - TQString what; - if (isWorkingCopy()) - { - chdir(baseUri().local8Bit()); - } - - if (!k) { - what=(isWorkingCopy()?".":baseUri()); - }else{ - what = relativePath(k); - } - Rangeinput_impl*rdlg; - KDialogBase*dlg = createDialog(&rdlg,TQString(i18n("Revisions")),true,"revisions_dlg"); - if (!dlg) { - return; - } - if (dlg->exec()==TQDialog::Accepted) { - Rangeinput_impl::revision_range r = rdlg->getRange(); - svn::Revision _peg=(isWorkingCopy()?svn::Revision::WORKING:remoteRevision()); - m_SvnWrapper->makeDiff(what,r.first,r.second,_peg,k?k->isDir():true); - } - dlg->saveDialogSize(*(Kdesvnsettings::self()->config()),"revisions_dlg",false); - delete dlg; - -} - -void tdesvnfilelist::slotSelectBrowsingRevision() -{ - if (isWorkingCopy()) return; - Rangeinput_impl*rdlg; - KDialogBase*dlg = createDialog(&rdlg,TQString(i18n("Revisions")),true,"revisions_dlg"); - if (!dlg) { - return; - } - rdlg->setStartOnly(true); - if (dlg->exec()==TQDialog::Accepted) { - Rangeinput_impl::revision_range r = rdlg->getRange(); - m_pList->m_remoteRevision= r.first; - if (childCount()==0) { - checkDirs(baseUri(),0); - } else { - refreshCurrentTree(); - } - } - dlg->saveDialogSize(*(Kdesvnsettings::self()->config()),"revisions_dlg",false); - delete dlg; -} - -/*! - \fn tdesvnfilelist::slotRevisionCat() - */ -void tdesvnfilelist::slotRevisionCat() -{ - SvnItem*k = singleSelected(); - if (!k) return; - Rangeinput_impl*rdlg; - KDialogBase*dlg = createDialog(&rdlg,TQString(i18n("Revisions")),true,"revisions_dlg"); - if (!dlg) { - return; - } - rdlg->setStartOnly(true); - if (dlg->exec()==TQDialog::Accepted) { - Rangeinput_impl::revision_range r = rdlg->getRange(); - m_SvnWrapper->slotMakeCat(r.first, k->fullName(),k->shortName(),r.first,0); - } - dlg->saveDialogSize(*(Kdesvnsettings::self()->config()),"revisions_dlg",false); - delete dlg; -} - - -/*! - \fn tdesvnfilelist::refreshItem(FileListViewItem*) - */ -bool tdesvnfilelist::refreshItem(FileListViewItem*item) -{ - if (!item) { - return false; - } - try { - item->setStat(svnclient()->singletqStatus(item->fullName(),false,m_pList->m_remoteRevision)); - } catch (const svn::ClientException&e) { - item->setStat(new svn::tqStatus()); - return false; - } - return true; -} - - -/*! - \fn tdesvnfilelist::slotCheckUpdates() - */ -void tdesvnfilelist::slotCheckUpdates() -{ - m_SvnWrapper->createUpdateCache(baseUri()); -} - -/*! - \fn tdesvnfilelist::reinitItems(FileListViewItem*_item = 0) - */ -void tdesvnfilelist::reinitItems(FileListViewItem*_item) -{ - FileListViewItem*item; - if (_item) { - item = _item; - } else { - item = static_cast<FileListViewItem*>(firstChild()); - } - if (!item) { - return; - } - item->init(); - if (item->childCount()==0 && item->isOpen()) { - m_Dirsread[item->fullName()]=false;; - setEnabled(false); - slotItemRead(item); - setEnabled(true); - } else { - item = static_cast<FileListViewItem*>(item->firstChild()); - while(item) { - reinitItems(item); - item = static_cast<FileListViewItem*>(item->nextSibling()); - } - } -} - - -/*! - \fn tdesvnfilelist::slotInfo() - */ -void tdesvnfilelist::slotInfo() -{ - TQPtrList<SvnItem> lst; - SelectionList(&lst); - svn::Revision rev(isWorkingCopy()?svn::Revision::UNDEFINED:m_pList->m_remoteRevision); - if (!isWorkingCopy()) { - rev = m_pList->m_remoteRevision; - } - if (lst.count()==0) { - if (!isWorkingCopy()) { - m_SvnWrapper->makeInfo(baseUri(),rev,svn::Revision::UNDEFINED,Kdesvnsettings::info_recursive()); - } else { - lst.append(SelectedOrMain()); - } - } - if (lst.count()>0) { - m_SvnWrapper->makeInfo(lst,rev,rev,Kdesvnsettings::info_recursive()); - } -} - - -/*! - \fn tdesvnfilelist::slotDirItemCreated(const TQString&) - */ -void tdesvnfilelist::slotDirItemCreated(const TQString&what) -{ - m_pList->stopDirTimer(); - m_pList->dirItems[what]='C'; - kdDebug()<<"slotDirItemCreated "<<what<<endl; - m_pList->startDirTimer(); -} - - -void tdesvnfilelist::updateParents(FileListViewItem*item) -{ - if (!item || !item->parent()) return; - FileListViewItem*it = static_cast<FileListViewItem*>(item->parent()); - it->update(); - updateParents(it); -} - -/*! - \fn tdesvnfilelist::slotDirItemDirty(const TQString&) - */ -void tdesvnfilelist::slotDirItemDirty(const TQString&what) -{ - m_pList->stopDirTimer(); - m_pList->dirItems[what]='M'; - m_pList->startDirTimer(); -} - -void tdesvnfilelist::_propListTimeout() -{ - dispProperties(false); -} - -void tdesvnfilelist::slotDisplayProperties() -{ - dispProperties(true); -} - -void tdesvnfilelist::dispProperties(bool force) -{ - CursorStack a(TQt::BusyCursor); - bool cache_Only = (!force && isNetworked() && !Kdesvnsettings::properties_on_remote_items()); - svn::PathPropertiesMapListPtr pm; - SvnItem*k = singleSelected(); - if (!k || !k->isRealVersioned()) { - emit sigProplist(svn::PathPropertiesMapListPtr(),false,TQString("")); - return; - } - kdDebug()<<"Cacheonly: "<<cache_Only<<endl; - svn::Revision rev(isWorkingCopy()?svn::Revision::WORKING:m_pList->m_remoteRevision); - pm =m_SvnWrapper->propList(k->fullName(),rev,cache_Only); - emit sigProplist(pm,isWorkingCopy(),k->fullName()); -} - -void tdesvnfilelist::_dirwatchTimeout() -{ - kdDebug()<<"dirtimer"<<endl; - TQMap<TQString,TQChar>::Iterator it; - m_pList->m_fileTip->setItem(0); - viewport()->setUpdatesEnabled(false); - bool repaintit=false; - for (it=m_pList->dirItems.begin();it!=m_pList->dirItems.end();++it) - { - TQString what = it.key(); - TQChar c = it.data(); - FileListViewItem*item = findEntryItem(what); - if (!item) { - m_pList->m_DirWatch->removeDir(what); - m_pList->m_DirWatch->removeFile(what); - m_SvnWrapper->deleteFromModifiedCache(what); - continue; - } - if (c == 'M') { - if (!item->isNormal() && item->isRealVersioned()) { - m_SvnWrapper->addModifiedCache(item->stat()); - } else { - m_SvnWrapper->deleteFromModifiedCache(what); - } - if (item->isDir()) { - if (item->isRealVersioned()) { - repaintit = refreshRecursive(item,false); - } else { - TQListViewItem *_s; - while ( (_s=item->firstChild())) - { - delete _s; - } - checkUnversionedDirs(item); - } - } - updateParents(static_cast<FileListViewItem*>(item->parent())); - } else if (c=='D') { - if (item->isDir()) { - m_pList->m_DirWatch->removeDir(what); - } else { - m_pList->m_DirWatch->removeFile(what); - } - if (item->isDeleted()) { - m_SvnWrapper->addModifiedCache(item->stat()); - } else if (!item->isMissing()) { - TQFileInfo fi(what); - if (!fi.exists()) { - FileListViewItem*p = static_cast<FileListViewItem*>(item->parent()); - delete item; - repaintit=true; - item = 0; - if (p && p->isVersioned()) { - p->update(); - updateParents(p); - } - } - } - } -#if 0 - when add dirItemDirty is send for folder above so no need for checking add-flag. - else { - kdDebug()<<"Entry added: "<<what << endl; - } -#endif - if (item) { - refreshItem(item); - } - } - m_pList->dirItems.clear(); - viewport()->setUpdatesEnabled(true); - if (repaintit) { -// viewport()->tqrepaint(); - } -} - -/*! - \fn tdesvnfilelist::slotDirItemDeleted(const TQString&) - */ -void tdesvnfilelist::slotDirItemDeleted(const TQString&what) -{ - m_pList->stopDirTimer(); - m_pList->m_fileTip->setItem(0); - TQMap<TQString,TQChar>::Iterator it = m_pList->dirItems.find(what); - if (it!=m_pList->dirItems.end() && m_pList->dirItems[what]=='A') { - m_pList->dirItems.erase(it); - } else { - m_pList->dirItems[what]='D'; - } - m_pList->startDirTimer(); -} - - -void tdesvnfilelist::gotPreview( const KFileItem*, const TQPixmap&) -{ -#if 0 - FileListViewItem*which = findEntryItem(item->localPath()); - if (which) { - which->setPreviewPix(pixmap); - } -// m_previewJob = 0; -// if (m_svnitem || item != m_svnitem->fileItem()) return; - -// m_iconLabel -> setPixmap(pixmap); -#endif -} - -void tdesvnfilelist::gotPreviewResult() -{ -// m_previewJob = 0; -} - -FileListViewItem* tdesvnfilelist::findEntryItem(const TQString&what,FileListViewItem*startAt) -{ - if (!startAt && !what.startsWith(baseUri())) return 0; - TQString _what = what; - FileListViewItem*_s,*_temp; - if (!startAt) { - while (_what.endsWith("/")) { - _what.truncate(_what.length()-1); - } - _s = static_cast<FileListViewItem*>(firstChild()); - } else { - _s = static_cast<FileListViewItem*>(startAt->firstChild()); - } - _temp = 0; - while (_s) { - if (_s->fullName()==_what) { - return _s; - } - if (_what.startsWith(_s->fullName())) { - _temp = findEntryItem(_what,_s); - if (_temp) { - return _temp; - } - } - _s = static_cast<FileListViewItem*>(_s->nextSibling()); - } - return 0; -} - - -/*! - \fn tdesvnfilelist::contentsMouseMoveEvent( TQMouseEvent *e ) - */ -void tdesvnfilelist::contentsMouseMoveEvent( TQMouseEvent *e ) -{ - if (!m_pList->mousePressed) - { - if (Kdesvnsettings::display_file_tips()) { - - TQPoint vp = contentsToViewport( e->pos() ); - FileListViewItem*item = isExecuteArea( vp ) ? static_cast<FileListViewItem*>(itemAt( vp )) : 0L; - - if (item) { - vp.setY( tqitemRect( item ).y() ); - TQRect rect( viewportToContents( vp ), TQSize(20, item->height()) ); - m_pList->m_fileTip->setItem( static_cast<SvnItem*>(item), rect, item->pixmap(0)); - m_pList->m_fileTip->setPreview(KGlobalSettings::showFilePreview(item->fullName())/*&&isWorkingCopy()*/ - &&Kdesvnsettings::display_previews_in_file_tips()); - setShowToolTips(false); - } else { - m_pList->m_fileTip->setItem(0); - setShowToolTips(true); - } - } else { - m_pList->m_fileTip->setItem(0); - setShowToolTips(true); - } - } - else - { - if (( m_pList->presspos - e->pos() ).manhattanLength() > TQApplication::startDragDistance()) - { - m_pList->m_fileTip->setItem(0); - m_pList->mousePressed=false; - //beginDrag(); - } - } - KListView::contentsMouseMoveEvent( e ); -} - -void tdesvnfilelist::contentsMousePressEvent(TQMouseEvent*e) -{ - KListView::contentsMousePressEvent(e); - m_pList->m_fileTip->setItem(0); - TQPoint p(contentsToViewport( e->pos())); - TQListViewItem *i = itemAt( p ); - // this is from qt the example - hopefully I got my problems with drag&drop fixed. - if ( i ) { - // if the user clicked into the root decoration of the item, don't try to start a drag! - if ( p.x() > header()->cellPos( header()->mapToActual( 0 ) ) + - treeStepSize() * ( i->depth() + ( rootIsDecorated() ? 1 : 0) ) + itemMargin() || - p.x() < header()->cellPos( header()->mapToActual( 0 ) ) ) - { - m_pList->presspos = e->pos(); - m_pList->mousePressed = true; - } - } -} - -void tdesvnfilelist::contentsMouseReleaseEvent(TQMouseEvent*e) -{ - KListView::contentsMouseReleaseEvent(e); - m_pList->mousePressed = false; -} - -/*! - \fn tdesvnfilelist::contentsWheelEvent( TQWheelEvent * e ) - */ -void tdesvnfilelist::contentsWheelEvent( TQWheelEvent * e ) -{ - // when scrolling with mousewheel, stop possible pending filetip - m_pList->m_fileTip->setItem(0); - KListView::contentsWheelEvent( e ); -} - -void tdesvnfilelist::leaveEvent(TQEvent*e) -{ - m_pList->m_fileTip->setItem( 0 ); - KListView::leaveEvent( e ); -} - -void tdesvnfilelist::slotSettingsChanged() -{ - m_pList->m_fileTip->setOptions(!isNetworked()&&Kdesvnsettings::display_file_tips()&& - TQToolTip::isGloballyEnabled(),true,6); - if (m_pList->reReadSettings()) { - refreshCurrentTree(); - } else { - viewport()->tqrepaint(); - } - enableActions(); - sort(); - if (m_SvnWrapper && !m_SvnWrapper->doNetworking()) { - m_SvnWrapper->stopFillCache(); - } -} - - -/*! - \fn tdesvnfilelist::slotRelocate() - */ -void tdesvnfilelist::slotRelocate() -{ - if (!isWorkingCopy()) return; - SvnItem*k = SelectedOrMain(); - if (!k) { - KMessageBox::error(0,i18n("Error getting entry to relocate")); - return; - } - TQString path,fromUrl; - path = k->fullName(); - fromUrl = k->Url(); - CheckoutInfo_impl*ptr; - KDialogBase * dlg = createDialog(&ptr,i18n("Relocate path %1").tqarg(path),true,"relocate_dlg"); - if (dlg) { - ptr->setStartUrl(fromUrl); - ptr->disableAppend(true); - ptr->disableTargetDir(true); - ptr->disableRange(true); - ptr->disableOpen(true); - ptr->disableExternals(true); - ptr->hideDepth(true,true); - bool done = false; - dlg->resize(dlg->configDialogSize(*(Kdesvnsettings::self()->config()),"relocate_dlg")); - if (dlg->exec()==TQDialog::Accepted) { - done = m_SvnWrapper->makeRelocate(fromUrl,ptr->reposURL(),path,ptr->overwrite()); - } - dlg->saveDialogSize(*(Kdesvnsettings::self()->config()),"relocate_dlg",false); - delete dlg; - if (!done) return; - } - refreshItem(k->fItem()); -} - -void tdesvnfilelist::checkUnversionedDirs( FileListViewItem * _parent ) -{ - TQDir d; - if (_parent) - d.setPath(_parent->fullName()); //FIXME: this one is not reliable, what if _parent == 0?? - // else - // d.setPath(this->firstChild()->fullName()); - - d.setFilter( TQDir::Files | TQDir::Dirs ); - - const TQFileInfoList *list = d.entryInfoList(); - if (!list) { - return; - } - TQFileInfoListIterator nonversioned_it( *list ); - TQFileInfo *fi; - - svn::StatusEntries nonversioned_list; - - // FIXME: create a dlist and feed to insertDirs, mean while .. we are copying insertDirs since we weren't able to set svn_node_kind into appropriate value - while ( (fi = nonversioned_it.current()) != 0 ) { - if ((fi->fileName()!=".") && (fi->fileName()!="..")) { - // trying to set entry->kind -// svn_wc_status2_t wc_stat; -// svn_wc_entry_t entry; -// char *temp; -// strcpy(temp, fi->fileName()); -// entry.name = temp; -// -// wc_stat.entry = &entry; -// if (fi->isDir()) -// entry.kind = svn_node_dir; -// else -// entry.kind = svn_node_file; -// -// svn::tqStatus stat(fi->fileName(), &wc_stat); - - svn::StatusPtr stat(new svn::tqStatus(fi->absFilePath())); - - // start copying insertDirs - FileListViewItem * item; - if (!_parent) { - item = new FileListViewItem(this, stat); - kdDebug()<< "creating new FileListViewitem " + item->fullName() << endl; - } else { - item = new FileListViewItem(this,_parent, stat); - kdDebug()<< "creating new FileListViewitem (with parent) " + item->fullName() << endl; - } - if (fi->isDir()) { - m_Dirsread[item->fullName()]=false; - item->setDropEnabled(true); - if (isWorkingCopy()) { - m_pList->m_DirWatch->addDir(item->fullName()); - } - kdDebug()<< "Watching folder: " + item->fullName() << endl; - } else if (isWorkingCopy()) { - m_pList->m_DirWatch->addFile(item->fullName()); - kdDebug()<< "Watching file: " + item->fullName() << endl; - } - // end of copying insertDirs - - nonversioned_list.append(stat); - kdDebug() << "creating new FileListViewItem from TQDir entry: " << fi->fileName() << endl; - } - ++nonversioned_it; - } - - // uncomment this if you've ben able to set svn_node_kind (see above) - //this->insertDirs(_parent, nonversioned_list); -} - -void tdesvnfilelist::rescanIconsRec(FileListViewItem*startAt,bool checkNewer,bool no_update) -{ - FileListViewItem*_s; - if (!startAt) { - _s = static_cast<FileListViewItem*>(firstChild()); - } else { - _s = static_cast<FileListViewItem*>(startAt->firstChild()); - } - if (!_s) { - return; - } - svn::SharedPointer<svn::tqStatus> d; - while (_s) { - //_s->makePixmap(); - - if (!no_update) { - if (m_SvnWrapper->getUpdated(_s->stat()->path(),d) && d) { - _s->updatetqStatus(d); - } else { - _s->update(); - } - } - rescanIconsRec(_s,checkNewer,no_update); - if (checkNewer && _s->isDir() && _s->isOpen()) { - svn::StatusEntries target; - m_SvnWrapper->getaddedItems(_s->stat()->path(),target); - insertDirs(_s,target); - } - _s = static_cast<FileListViewItem*>(_s->nextSibling()); - } -} - -void tdesvnfilelist::slotRescanIcons(bool checkNewer) -{ - rescanIconsRec(0L,checkNewer); -} - - -/*! - \fn tdesvnfilelist::slotCheckNewItems() - */ -void tdesvnfilelist::slotCheckNewItems() -{ - if (!isWorkingCopy()) { - KMessageBox::sorry(0,i18n("Only in working copy possible."),i18n("Error")); - return; - } - if (allSelected()->count()>1) { - KMessageBox::sorry(0,i18n("Only on single folder possible"),i18n("Error")); - return; - } - SvnItem*w = SelectedOrMain(); - if (!w) { - KMessageBox::sorry(0,i18n("Sorry - internal error!"),i18n("Error")); - return; - } - m_SvnWrapper->checkAddItems(w->fullName(),true); -} - -/*! - \fn tdesvnfilelist::slotMakeRangeLog() - */ -void tdesvnfilelist::slotMakeRangeLog() -{ - TQString what; - SvnItem*k = SelectedOrMain(); - if (k) { - what = k->fullName(); - } else if (!isWorkingCopy() && allSelected()->count()==0){ - what = baseUri(); - } else { - return; - } - Rangeinput_impl*rdlg; - KDialogBase*dlg = createDialog(&rdlg,TQString(i18n("Revisions")),true,"revisions_dlg"); - if (!dlg) { - return; - } - bool list = Kdesvnsettings::self()->log_always_list_changed_files(); - int i = dlg->exec(); - if (i==TQDialog::Accepted) { - Rangeinput_impl::revision_range r = rdlg->getRange(); - m_SvnWrapper->makeLog(r.first,r.second,(isWorkingCopy()?svn::Revision::UNDEFINED:m_pList->m_remoteRevision), what,list,0); - } - dlg->saveDialogSize(*(Kdesvnsettings::self()->config()),"revisions_dlg",false); -} - - -void tdesvnfilelist::slotMakeTree() -{ - TQString what; - SvnItem*k = SelectedOrMain(); - if (k) { - what = k->fullName(); - } else if (!isWorkingCopy() && allSelected()->count()==0){ - what = baseUri(); - } else { - return; - } - svn::Revision rev(isWorkingCopy()?svn::Revision::WORKING:m_pList->m_remoteRevision); - - m_SvnWrapper->makeTree(what,rev); -} - -void tdesvnfilelist::slotMakePartTree() -{ - TQString what; - SvnItem*k = SelectedOrMain(); - if (k) { - what = k->fullName(); - } else if (!isWorkingCopy() && allSelected()->count()==0){ - what = baseUri(); - } else { - return; - } - Rangeinput_impl*rdlg; - KDialogBase*dlg = createDialog(&rdlg,TQString(i18n("Revisions")),true,"revisions_dlg"); - if (!dlg) { - return; - } - int i = dlg->exec(); - Rangeinput_impl::revision_range r; - if (i==TQDialog::Accepted) { - r = rdlg->getRange(); - } - dlg->saveDialogSize(*(Kdesvnsettings::self()->config()),"revisions_dlg",false); - - if (i==TQDialog::Accepted) { - svn::Revision rev(isWorkingCopy()?svn::Revision::UNDEFINED:m_pList->m_remoteRevision); - m_SvnWrapper->makeTree(what,rev,r.first,r.second); - } -} - -/*! - \fn tdesvnfilelist::slotMakeLog() - */ -void tdesvnfilelist::slotMakeLog() -{ - TQString what; - SvnItem*k = SelectedOrMain(); - if (k) { - what = k->fullName(); - } else if (!isWorkingCopy() && allSelected()->count()==0){ - what = baseUri(); - } else { - return; - } - // yes! so if we have a limit, the limit counts from HEAD - // not from START - svn::Revision start(svn::Revision::HEAD); - if (!isWorkingCopy()) { - start=m_pList->m_remoteRevision; - } - svn::Revision end(svn::Revision::START); - bool list = Kdesvnsettings::self()->log_always_list_changed_files(); - int l = Kdesvnsettings::self()->maximum_displayed_logs(); - m_SvnWrapper->makeLog(start,end,(isWorkingCopy()?svn::Revision::UNDEFINED:m_pList->m_remoteRevision),what,list,l); -} - -const svn::Revision& tdesvnfilelist::remoteRevision()const -{ - return m_pList->m_remoteRevision; -} - - -/*! - \fn tdesvnfilelist::slotOpenWith() - */ -void tdesvnfilelist::slotOpenWith() -{ - FileListViewItem* which = singleSelected(); - if (!which||which->isDir()) { - return; - } - svn::Revision rev(isWorkingCopy()?svn::Revision::UNDEFINED:m_pList->m_remoteRevision); - KURL::List lst; - lst.append(which->kdeName(rev)); - KRun::displayOpenWithDialog(lst); -} - -void tdesvnfilelist::slotUnfoldTree() -{ - StopSimpleDlg sdlg(0,0,i18n("Unfold tree"),i18n("Unfold all folder")); - - connect(this,TQT_SIGNAL(sigListError()), - &sdlg,TQT_SLOT(makeCancel())); - - TQListViewItemIterator it(this); - TQTime t;t.start(); - - setUpdatesEnabled(false); - { - WidgetBlockStack a(this); - while (TQListViewItem* item = it.current()) - { - if (item->isExpandable()) { - if (sdlg.isCanceld()) { - m_SvnWrapper->slotCancel(true); - break; - } - if (t.elapsed()>=200) { - sdlg.slotTick(); - kapp->tqprocessEvents(20); - t.restart(); - } - ((FileListViewItem*)item)->setOpenNoBlock(true); - } - ++it; - } - } - setFocus(); - setUpdatesEnabled(true); - viewport()->tqrepaint(); - tqrepaint(); - m_SvnWrapper->slotCancel(false); -} - -void tdesvnfilelist::slotFoldTree() -{ - TQListViewItemIterator it(this); - while (TQListViewItem* item = it.current()) - { - // don't close the top level directory - if (item->isExpandable() && item->parent()) - item->setOpen(false); - - ++it; - } -} - -/*! - \fn tdesvnfilelist::uniqueSelected() - */ -bool tdesvnfilelist::uniqueTypeSelected() -{ - FileListViewItemList*ls = allSelected(); - FileListViewItemListIterator it(*ls); - FileListViewItem*cur=it.current(); - if (!cur) { - return false; - } - bool dir = cur->isDir(); - while ( (cur=it.current())!=0) { - ++it; - if (cur->isDir()!=dir) { - return false; - } - } - return true; -} - -void tdesvnfilelist::slotChangeProperties(const svn::PropertiesMap&pm,const TQValueList<TQString>&dellist,const TQString&path) -{ - m_SvnWrapper->changeProperties(pm,dellist,path); - FileListViewItem* which = singleSelected(); - kdDebug()<<(which?which->fullName():"nix") << " -> " << path<<endl; - if (which && which->fullName()==path) { - which->refreshtqStatus(); - refreshCurrent(which); - _propListTimeout(); - } -} - -void tdesvnfilelist::slotUpdateLogCache() -{ - if (baseUri().length()>0 && m_SvnWrapper->doNetworking()) { - KAction*temp = filesActions()->action("update_log_cache"); - - if (!m_SvnWrapper->threadRunning(SvnActions::fillcachethread)) { - m_SvnWrapper->startFillCache(baseUri()); - if (temp) { - temp->setText(i18n("Stop updating the logcache")); - } - } else { - m_SvnWrapper->stopFillCache(); - if (temp) { - temp->setText(i18n("Update log cache")); - } - } - } -} - -#include "tdesvnfilelist.moc" |