/*************************************************************************** krslots.cpp ------------------- copyright : (C) 2001 by Shie Erlich & Rafi Yanai email : krusader@users.sourceforge.net web site : http://krusader.sourceforge.net --------------------------------------------------------------------------- Description *************************************************************************** A db dD d8888b. db db .d8888. .d8b. d8888b. d88888b d8888b. 88 ,8P' 88 `8D 88 88 88' YP d8' `8b 88 `8D 88' 88 `8D 88,8P 88oobY' 88 88 `8bo. 88ooo88 88 88 88ooooo 88oobY' 88`8b 88`8b 88 88 `Y8b. 88~~~88 88 88 88~~~~~ 88`8b 88 `88. 88 `88. 88b d88 db 8D 88 88 88 .8D 88. 88 `88. YP YD 88 YD ~Y8888P' `8888Y' YP YP Y8888D' Y88888P 88 YD S o u r c e F i l e *************************************************************************** * * * 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. * * * ***************************************************************************/ #include #include #include #include #include #include // TDE includes #include #include #include #include #include #include #include #include #include #include #ifdef __KJSEMBED__ #include "KrJS/krjs.h" #include #endif // Krusader includes #include "krslots.h" #include "krusader.h" #include "krusaderview.h" #include "Panel/listpanel.h" #include "Panel/krselectionmode.h" #include "Panel/krdetailedview.h" #include "Panel/krdetailedviewitem.h" #include "Panel/krbriefview.h" #include "Panel/krbriefviewitem.h" #include "Dialogs/krdialogs.h" #include "Dialogs/krspwidgets.h" #include "Dialogs/krkeydialog.h" #include "GUI/krusaderstatus.h" #include "RemoteMan/remoteman.h" #include "Panel/panelfunc.h" #include "Konfigurator/konfigurator.h" #include "MountMan/kmountman.h" #include "defaults.h" #include "resources.h" #include "GUI/kfnkeys.h" #include "GUI/kcmdline.h" #include "GUI/syncbrowsebutton.h" #include "VFS/krquery.h" #include "Search/krsearchmod.h" #include "Search/krsearchdialog.h" #include "Locate/locate.h" #include "VFS/vfs.h" #include "panelmanager.h" #include "Splitter/splittergui.h" #include "Splitter/splitter.h" #include "Splitter/combiner.h" #include "ActionMan/actionman.h" #include "UserMenu/usermenu.h" #include "Panel/panelpopup.h" #include "Synchronizer/synchronizergui.h" #include "DiskUsage/diskusagegui.h" #include "krservices.h" #include "Panel/krviewitem.h" #define REFRESH_BOTH_PANELS { ListPanel *p=ACTIVE_PANEL; \ MAIN_VIEW->left->func->refresh(); \ MAIN_VIEW->right->func->refresh();\ p->slotFocusOnMe(); } #define ACTIVE_PANEL_MANAGER (ACTIVE_PANEL == krApp->mainView->left ? krApp->mainView->leftMng : \ krApp->mainView->rightMng) void KRslots::sendFileByEmail(TQString filename) { TQString mailProg; TQStringList lst = Krusader::supportedTools(); if (lst.contains("MAIL")) mailProg=lst[lst.findIndex("MAIL") + 1]; else { KMessageBox::error(0,i18n("Krusader can't find a supported mail client. Please install one to your path. Hint: Krusader supports Kmail.")); return; } KShellProcess proc; if ( vfs::fromPathOrURL( mailProg ).fileName() == "kmail") { proc << "kmail" << "--subject \""+i18n("Sending file: ")+ filename.mid(filename.findRev('/')+1)+"\"" << TQString() + "--attach "+"\"" + filename + "\""; } if (!proc.start(TDEProcess::DontCare)) KMessageBox::error(0,i18n("Error executing ")+mailProg+" !"); else proc.detach(); } void KRslots::compareContent() { TQStringList lstLeft, lstRight; TQStringList* lstActive; KURL name1, name2; MAIN_VIEW->left->getSelectedNames( &lstLeft ); MAIN_VIEW->right->getSelectedNames( &lstRight ); lstActive = ( ACTIVE_PANEL->isLeft() ? &lstLeft : &lstRight ); if ( lstLeft.count() == 1 && lstRight.count() == 1 ) { // first, see if we've got exactly 1 selected file in each panel: name1 = MAIN_VIEW->left->func->files()->vfs_getFile( lstLeft[0] ); name2 = MAIN_VIEW->right->func->files()->vfs_getFile( lstRight[0] ); } else if ( lstActive->count() == 2 ) { // next try: are in the current panel exacty 2 files selected? name1 = ACTIVE_PANEL->func->files()->vfs_getFile( (*lstActive)[0] ); name2 = ACTIVE_PANEL->func->files()->vfs_getFile( (*lstActive)[1] ); } else if ( ACTIVE_PANEL->otherPanel->func->files()->vfs_search( ACTIVE_PANEL->view->getCurrentItem() ) ) { // next try: is in the other panel a file with the same name? name1 = ACTIVE_PANEL->func->files()->vfs_getFile( ACTIVE_PANEL->view->getCurrentItem() ); name2 = ACTIVE_PANEL->otherPanel->func->files()->vfs_getFile( ACTIVE_PANEL->view->getCurrentItem() ); } else { // if we got here, then we can't be sure what file to diff KMessageBox::detailedError(0, i18n("Don't know which files to compare."), "" + i18n("To compare two files by content, you can either:
  • Select one file in the left panel, and one in the right panel.
  • Select exactly two files in the active panel.
  • Make sure there is a file in the other panel, with the same name as the current file in the active panel.
") + "
" ); return; } // else implied: all ok, let's call kdiff // but if one of the files isn't local, download them first compareContent( name1, name2 ); } class KrProcess: public TDEProcess { TQString tmp1, tmp2; public: KrProcess( TQString in1, TQString in2 ) { tmp1 = in1; tmp2 = in2; } virtual void processHasExited (int ) { if( !tmp1.isEmpty() ) TDEIO::NetAccess::removeTempFile( tmp1 ); if( !tmp2.isEmpty() ) TDEIO::NetAccess::removeTempFile( tmp2 ); delete this; } }; void KRslots::compareContent( KURL url1, KURL url2 ) { TQString diffProg; TQStringList lst = Krusader::supportedTools(); if (lst.contains("DIFF")) diffProg=lst[lst.findIndex("DIFF") + 1]; else { KMessageBox::error(0,i18n("Krusader can't find any of the supported diff-frontends. Please install one to your path. Hint: Krusader supports Kompare, Kdiff3 and Xxdiff.")); return; } TQString tmp1 = TQString(), tmp2 = TQString(); if (!url1.isLocalFile()) { if( !TDEIO::NetAccess::download( url1, tmp1, 0 ) ){ KMessageBox::sorry(krApp,i18n("Krusader is unable to download: ")+url1.fileName()); return; } } else tmp1 = url1.path(); if (!url2.isLocalFile()) { if( !TDEIO::NetAccess::download( url2, tmp2, 0 ) ){ KMessageBox::sorry(krApp,i18n("Krusader is unable to download: ")+url2.fileName()); if( tmp1 != url1.path() ) TDEIO::NetAccess::removeTempFile( tmp1 ); return; } } else tmp2 = url2.path(); KrProcess *p = new KrProcess( tmp1 != url1.path() ? tmp1 : TQString(), tmp2 != url2.path() ? tmp2 : TQString() ); *p << diffProg << tmp1 << tmp2; if (!p->start(TDEProcess::DontCare)) KMessageBox::error(0,i18n("Error executing ")+diffProg+" !"); } void KRslots::rightclickMenu() { if( dynamic_cast(ACTIVE_PANEL->view) != 0 ) { TQListViewItem * currentItem = dynamic_cast(ACTIVE_PANEL->view->getCurrentKrViewItem()); if( currentItem ) { ACTIVE_PANEL->popRightClickMenu( ACTIVE_PANEL->mapToGlobal( dynamic_cast(ACTIVE_PANEL->view)->itemRect( currentItem ).topLeft() ) ); } } else if( dynamic_cast(ACTIVE_PANEL->view) != 0 ) { TQIconViewItem * currentItem = dynamic_cast(ACTIVE_PANEL->view->getCurrentKrViewItem()); if( currentItem ) { ACTIVE_PANEL->popRightClickMenu( ACTIVE_PANEL->mapToGlobal( currentItem->rect().topLeft() ) ); } } } void KRslots::addBookmark(){ // TODO: this no longer works! } // GUI toggle slots void KRslots::toggleFnkeys(){ if( MAIN_VIEW->fnKeys->isVisible() ) MAIN_VIEW->fnKeys->hide(); else MAIN_VIEW->fnKeys->show(); } void KRslots::toggleCmdline(){ if( MAIN_VIEW->cmdLine->isVisible() ) MAIN_VIEW->cmdLine->hide(); else MAIN_VIEW->cmdLine->show(); } void KRslots::toggleToolbar() { if (krApp->toolBar()->isVisible()) krApp->toolBar()->hide(); else krApp->toolBar()->show(); } void KRslots::toggleActionsToolbar() { if (krApp->toolBar("actionsToolBar")->isVisible()) krApp->toolBar("actionsToolBar")->hide(); else krApp->toolBar("actionsToolBar")->show(); } void KRslots::toggleStatusbar() { if (krApp->statusBar()->isVisible()) krApp->statusBar()->hide(); else krApp->statusBar()->show(); } void KRslots::toggleTerminal() { if( MAIN_VIEW->terminal_dock->isVisible() ) MAIN_VIEW->slotTerminalEmulator(false); else MAIN_VIEW->slotTerminalEmulator(true); } void KRslots::insertFileName(bool full_path) { TQString filename = ACTIVE_PANEL->view->getCurrentItem(); if( filename == TQString() ) return; if( full_path ){ TQString path=vfs::pathOrURL( ACTIVE_FUNC->files()->vfs_getOrigin(), 1 ); filename = path+filename; } filename = KrServices::quote( filename ); if(MAIN_VIEW->cmdLine->isVisible() || !MAIN_VIEW->konsole_part || !MAIN_VIEW->konsole_part->widget() || !MAIN_VIEW->konsole_part->widget()->isVisible() ){ TQString current = MAIN_VIEW->cmdLine->text(); if( current.length() != 0 && !current.endsWith( " " ) ) current += " "; MAIN_VIEW->cmdLine->setText( current + filename ); MAIN_VIEW->cmdLine->setFocus(); } else if(MAIN_VIEW->konsole_part){ filename = TQString( " " ) + filename + TQString( " " ); TQKeyEvent keyEvent( TQEvent::KeyPress, 0, -1, 0, filename); TQApplication::sendEvent( MAIN_VIEW->konsole_part->widget(), &keyEvent ); MAIN_VIEW->konsole_part->widget()->setFocus(); } } // directory list functions void KRslots::allFilter() { ACTIVE_PANEL->setFilter(KrViewProperties::All); } void KRslots::execFilter() { ACTIVE_PANEL->setFilter(KrViewProperties::All); } void KRslots::customFilter() { ACTIVE_PANEL->setFilter(KrViewProperties::Custom); } void KRslots::markAll() { ACTIVE_PANEL->select(true,true); } void KRslots::unmarkAll() { ACTIVE_PANEL->select(false,true); } void KRslots::markGroup() { ACTIVE_PANEL->select(true,false); } void KRslots::markGroup(const TQString& mask, bool select) { ACTIVE_PANEL->select( KRQuery( mask ), select); } void KRslots::unmarkGroup() { ACTIVE_PANEL->select(false,false); } void KRslots::invert() { ACTIVE_PANEL->invertSelection(); } void KRslots::root() { ACTIVE_FUNC->openUrl(vfs::fromPathOrURL("/"));} void KRslots::refresh(const KURL& u){ ACTIVE_FUNC->openUrl(u); } void KRslots::home() { ACTIVE_FUNC->openUrl(TQDir::homeDirPath()); } void KRslots::refresh() { ACTIVE_FUNC->refresh(); } void KRslots::properties() { ACTIVE_FUNC->properties(); } void KRslots::dirUp() { ACTIVE_FUNC->dirUp(); } void KRslots::back() { ACTIVE_FUNC->goBack(); } void KRslots::slotPack() { ACTIVE_FUNC->pack(); } void KRslots::slotUnpack() { ACTIVE_FUNC->unpack(); } void KRslots::testArchive() { ACTIVE_FUNC->testArchive(); } void KRslots::calcSpace() { ACTIVE_FUNC->calcSpace(); } void KRslots::FTPDisconnect() { ACTIVE_FUNC->FTPDisconnect(); } void KRslots::newFTPconnection(){ ACTIVE_FUNC->newFTPconnection(); } void KRslots::cut() { ACTIVE_FUNC->copyToClipboard( true ); } void KRslots::copy() { ACTIVE_FUNC->copyToClipboard( false ); } void KRslots::paste() { ACTIVE_FUNC->pasteFromClipboard(); } void KRslots::createChecksum() { ACTIVE_FUNC->createChecksum(); } void KRslots::matchChecksum() { ACTIVE_FUNC->matchChecksum(); } // run external modules / programs void KRslots::runKonfigurator(bool firstTime) { krConfig->setGroup( "Look&Feel" ); int size = (krConfig->readEntry("Filelist Icon Size",_FilelistIconSize)).toInt(); Konfigurator *konfigurator = new Konfigurator(firstTime); if( konfigurator->isGUIRestartNeeded() ) { krConfig->setGroup( "Look&Feel" ); if((krConfig->readEntry("Filelist Icon Size",_FilelistIconSize)).toInt() != size ) TQPixmapCache::clear(); KrDetailedViewItem::itemHeightChanged(); // needed when icon size / font size changes KrBriefViewItem::itemHeightChanged(); MAIN_VIEW->leftMng->slotRecreatePanels(); MAIN_VIEW->rightMng->slotRecreatePanels(); MAIN_VIEW->fnKeys->updateShortcuts(); KrSelectionMode::resetSelectionHandler(); } krApp->configChanged(); delete konfigurator; } void KRslots::setDetailedView() { if( ACTIVE_PANEL && ACTIVE_PANEL->getType() != "Detailed" ) ACTIVE_PANEL->changeType( "Detailed" ); } void KRslots::setBriefView() { if( ACTIVE_PANEL && ACTIVE_PANEL->getType() != "Brief" ) ACTIVE_PANEL->changeType( "Brief" ); } void KRslots::toggleHidden(){ krConfig->setGroup("Look&Feel"); bool show = !krConfig->readBoolEntry("Show Hidden",_ShowHidden); krApp->actToggleHidden->setChecked(show); krConfig->writeEntry("Show Hidden",show); MAIN_VIEW->leftMng->refreshAllTabs( true ); MAIN_VIEW->rightMng->refreshAllTabs( true ); } void KRslots::swapPanels(){ KURL leftURL = MAIN_VIEW->left->func->files()->vfs_getOrigin(); KURL rightURL = MAIN_VIEW->right->func->files()->vfs_getOrigin(); MAIN_VIEW->left->func->openUrl( rightURL ); MAIN_VIEW->right->func->openUrl( leftURL ); } void KRslots::toggleSwapSides(){ TQValueList lst = MAIN_VIEW->horiz_splitter->sizes(); MAIN_VIEW->horiz_splitter->moveToLast( MAIN_VIEW->leftMng ); int old = lst[ 0 ]; lst[ 0 ] = lst [ 1 ]; lst[ 1 ] = old; MAIN_VIEW->horiz_splitter->setSizes( lst ); ListPanel *tmpPanel; // temporary variables for swapping PanelManager *tmpMng; tmpMng = MAIN_VIEW->leftMng; MAIN_VIEW->leftMng = MAIN_VIEW->rightMng; MAIN_VIEW->rightMng = tmpMng; tmpPanel = MAIN_VIEW->left; MAIN_VIEW->left = MAIN_VIEW->right; MAIN_VIEW->right = tmpPanel; MAIN_VIEW->leftMng->swapPanels(); MAIN_VIEW->rightMng->swapPanels(); MAIN_VIEW->left->updateGeometry(); MAIN_VIEW->right->updateGeometry(); } void KRslots::search() { if ( KrSearchDialog::SearchDialog != 0 ) { krConfig->setGroup( "Search" ); if( krConfig->readBoolEntry( "Window Maximized", false ) ) KrSearchDialog::SearchDialog->showMaximized(); else KrSearchDialog::SearchDialog->showNormal(); KrSearchDialog::SearchDialog->raise(); KrSearchDialog::SearchDialog->setActiveWindow(); } else KrSearchDialog::SearchDialog = new KrSearchDialog(); } void KRslots::locate() { if( !KrServices::cmdExist( "locate" ) ) { KMessageBox::error(krApp, i18n( "Can't find the 'locate' command. Please install the " "findutils-locate package of GNU, or set its dependencies in " "Konfigurator" )); return; } if ( LocateDlg::LocateDialog != 0 ) { LocateDlg::LocateDialog->showNormal(); LocateDlg::LocateDialog->raise(); LocateDlg::LocateDialog->setActiveWindow(); LocateDlg::LocateDialog->reset(); } else LocateDlg::LocateDialog = new LocateDlg(); } void KRslots::runRemoteMan() { // display outage information KMessageBox::information(krApp, i18n( "Important: RemoteMan has been replaced by our new bookmark manager. " "The new manager handles local files and remote URLs the same way. " "RemoteMan is being left around to allow an easier transition and " "give you a chance to move your bookmarks. IT WILL BE REMOVED SOON!" "\n" "Try the new bookmark-manager: open a new remote connection, once " "done, press the bookmark button, select 'Add bookmark' and that's it!")); TQString host=remoteMan::getHost(); if (host==TQString()) return; // otherwise, attempt a connection ACTIVE_FUNC->openUrl(vfs::fromPathOrURL(host)); } void KRslots::runMountMan() { // left as a precaution, although we use kde's services now if( !KrServices::cmdExist( "df" ) || !KrServices::cmdExist( "mount" ) ) { KMessageBox::error(0, i18n("Can't start 'mount'! Check the 'Dependencies' page in konfigurator.")); return; } krApp->mountMan->mainWindow(); } void KRslots::homeTerminal(){ TQString save = getcwd(0,0); chdir (TQDir::homeDirPath().local8Bit()); TDEProcess proc; krConfig->setGroup("General"); TQString term = krConfig->readEntry("Terminal",_Terminal); proc << KrServices::separateArgs( term ); if( term.contains( "konsole" ) ) /* KDE 3.2 bug (konsole is killed by pressing Ctrl+C) */ { /* Please remove the patch if the bug is corrected */ proc << "&"; proc.setUseShell( true ); } if(!proc.start(TDEProcess::DontCare)) KMessageBox::sorry(krApp,i18n("Can't open ")+"\""+term+"\""); chdir(save.local8Bit()); } void KRslots::sysInfo(){ TDEProcess proc; proc << "tdecmshell" << "System/ksysctrl"; if (!proc.start(TDEProcess::DontCare)){ KMessageBox::sorry(krApp,i18n("Can't find \"KsysCtrl\". Please install the TDE admin package")); } } void KRslots::multiRename(){ TQStringList lst = Krusader::supportedTools(); int i = lst.findIndex("RENAME"); if (i == -1){ KMessageBox::sorry(krApp,i18n("Can't find a batch rename tool.\nYou can get Krename at http://www.krename.net")); return; } TQString pathToRename = lst[i+1]; TQStringList names; ((ListPanel*)ACTIVE_PANEL)->getSelectedNames(&names); KURL::List* urls = ACTIVE_FUNC->files()->vfs_getFiles(&names); if( urls->isEmpty() ){ delete urls; return; } KShellProcess proc; proc << pathToRename; for( KURL::List::iterator u=urls->begin(); u != urls->end(); ++u){ if( TQFileInfo((*u).path()).isDir() ) proc << "-r"; proc << "\"" + (*u).path() + "\""; // patch thanks to Tobias Vogele } proc.start(TDEProcess::DontCare); delete urls; } void KRslots::rootKrusader() { if( !KrServices::cmdExist( "krusader" ) || !KrServices::cmdExist( "tdesu" ) ) { KMessageBox::sorry( krApp, i18n( "Can't start root mode krusader, because krusader or tdesu is missing from the path. Please configure the dependencies in Konfigurator!" ) ); return; } KShellProcess proc; proc << KrServices::fullPathName( "tdesu" ) << TQString("'") + KrServices::fullPathName( "krusader" ) + " --left=\"" +MAIN_VIEW->left->func->files()->vfs_getOrigin().url() + "\" --right=\""+MAIN_VIEW->right->func->files()->vfs_getOrigin().url() + "\"'"; proc.start(TDEProcess::DontCare); } // settings slots void KRslots::configToolbar(){ KEditToolbar dlg(krApp->factory()); if (dlg.exec()) krApp->updateGUI(); } void KRslots::configKeys(){ KrKeyDialog( MAIN_VIEW ); } // misc void KRslots::changeTrashIcon(){ // update trash bin icon - this is "stolen" konqi code // Copyright (C) 2000 David Faure KURL trash; trash.setPath(TDEGlobalSettings::trashPath()); KURL::List lst; lst.append(trash); KDirNotify_stub allDirNotify("*","KDirNotify*"); allDirNotify.FilesChanged( lst ); // end of konqi code } // F2 void KRslots::terminal() { ACTIVE_FUNC->terminal(); } // F3 void KRslots::view() { ACTIVE_FUNC->view(); } // F4 void KRslots::edit() { ACTIVE_FUNC->editFile(); } // F5 void KRslots::copyFiles() { ACTIVE_FUNC->copyFiles(); } // F6 void KRslots::moveFiles() { ACTIVE_FUNC->moveFiles(); } // F7 void KRslots::mkdir() { ACTIVE_FUNC->mkdir(); } // F8 void KRslots::deleteFiles(bool reallyDelete) { ACTIVE_FUNC->deleteFiles(reallyDelete);} // F9 void KRslots::rename() { ACTIVE_FUNC->rename(); } // Shift F3 void KRslots::viewDlg(){ // ask the user for a url to view KURL dest = KChooseDir::getDir(i18n("Enter a URL to view:"), ACTIVE_PANEL->virtualPath(), ACTIVE_PANEL->virtualPath()); if ( dest.isEmpty() ) return ; // the user canceled KrViewer::view( dest ); // view the file // } // nothing more to it! } // Shift F4 void KRslots::editDlg(){ // ask the user for the filename to edit KURL dest = KChooseDir::getDir(i18n("Enter the filename to edit:"), ACTIVE_PANEL->virtualPath(), ACTIVE_PANEL->virtualPath()); if ( dest.isEmpty() ) return ; // the user canceled KrViewer::edit( dest ); if( dest.upURL().equals( ACTIVE_PANEL->virtualPath(), true ) ) refresh(); } void KRslots::duplicateTab() { ACTIVE_PANEL_MANAGER->slotNewTab(ACTIVE_PANEL->virtualPath()); } // ugly: do this right before release! void KRslots::newTab(const KURL& url) { if (url.isValid()) ACTIVE_PANEL_MANAGER->slotNewTab(url); else ACTIVE_PANEL_MANAGER->slotNewTab(); } void KRslots::nextTab() { ACTIVE_PANEL_MANAGER->slotNextTab(); } void KRslots::previousTab() { ACTIVE_PANEL_MANAGER->slotPreviousTab(); } void KRslots::newTab(KrViewItem *it) { if (!it) return; if( it->name() == ".." ) { KURL url = ACTIVE_PANEL->virtualPath(); ACTIVE_PANEL_MANAGER->slotNewTab( url.upURL() ); } else if (ITEM2VFILE(ACTIVE_PANEL, it)->vfile_isDir()) { KURL url = ACTIVE_PANEL->virtualPath(); url.addPath( it->name() ); ACTIVE_PANEL_MANAGER->slotNewTab( url ); } } void KRslots::closeTab() { ACTIVE_PANEL_MANAGER->slotCloseTab(); } void KRslots::slotSplit() { TQStringList list; TQString name; ((ListPanel*)ACTIVE_PANEL)->getSelectedNames(&list); // first, see if we've got exactly 1 selected file, if not, try the current one if (list.count() == 1) name = list[0]; if ( name.isEmpty() ) { // if we got here, then one of the panel can't be sure what file to diff KMessageBox::error(0,i18n("Don't know which file to split.")); return; } KURL fileURL = ACTIVE_FUNC->files()->vfs_getFile(name); if( fileURL.isEmpty() ) return; if ( ACTIVE_FUNC->files()->vfs_search( name )->vfile_isDir() ) { KMessageBox::sorry( krApp, i18n( "You can't split a directory!" ) ); return ; } KURL destDir = ACTIVE_PANEL->otherPanel->func->files()->vfs_getOrigin(); SplitterGUI splitterGUI( MAIN_VIEW, fileURL, destDir ); if( splitterGUI.result() == TQDialog::Accepted ) { bool splitToOtherPanel = ( splitterGUI.getDestinationDir().equals( ACTIVE_PANEL->otherPanel->virtualPath(), true ) ); Splitter split( MAIN_VIEW, fileURL, splitterGUI.getDestinationDir() ); split.split( splitterGUI.getSplitSize() ); if ( splitToOtherPanel ) ACTIVE_PANEL->otherPanel->func->refresh(); } } void KRslots::slotCombine(){ TQStringList list; KURL baseURL; bool unixStyle = false; bool windowsStyle = false; TQString commonName = TQString(); unsigned int commonLength = 0; ((ListPanel*)ACTIVE_PANEL)->getSelectedNames(&list); if ( list.isEmpty() ) { KMessageBox::error(0,i18n("Don't know which files to combine.")); return; } /* checking splitter names */ for ( TQStringList::Iterator it = list.begin(); it != list.end(); ++it ) { KURL url = ACTIVE_FUNC->files()->vfs_getFile(*it); if( url.isEmpty() ) return; if ( ACTIVE_FUNC->files()->vfs_search( *it )->vfile_isDir() ) { KMessageBox::sorry( krApp, i18n( "You can't combine a directory!" ) ); return ; } if( !unixStyle ) { TQString name = url.fileName(); int extPos = name.findRev( '.' ); TQString ext = name.mid( extPos + 1 ); name.truncate( extPos ); url.setFileName( name ); bool isExtInt; ext.toInt( &isExtInt, 10 ); if( extPos < 1 || ext.isEmpty() || ( ext != "crc" && !isExtInt ) ) { if( windowsStyle ) { KMessageBox::error(0,i18n("Not a split file %1!").arg( vfs::pathOrURL( url ) )); return; } unixStyle = true; } else { if( ext != "crc" ) windowsStyle = true; if( baseURL.isEmpty() ) baseURL = url; else if( baseURL != url ) { KMessageBox::error(0,i18n("Select only one split file!")); return; } } } if( unixStyle ) { bool error = true; do { TQString shortName = *it; TQChar lastChar = shortName.at( shortName.length()-1 ); if( lastChar.isLetter() ) { char fillLetter = ( lastChar.upper() == lastChar ) ? 'A' : 'a'; if( commonName.isNull() ) { commonLength = shortName.length(); commonName = shortName; while ( commonName.length() ) { TQString shorter = commonName.left( commonName.length() - 1 ); TQString testFile = shorter.leftJustify( commonLength, fillLetter ); if( ACTIVE_FUNC->files()->vfs_search( testFile ) == 0 ) break; else { commonName = shorter; baseURL = ACTIVE_FUNC->files()->vfs_getOrigin(); baseURL.addPath( testFile ); } } error = ( commonName == shortName ); } else if( commonLength == shortName.length() && shortName.startsWith( commonName ) ) error = false; } }while ( false ); if( error ) { KMessageBox::error(0,i18n("Not a splitted file %1!").arg( vfs::pathOrURL( url ) )); return; } } } // ask the user for the copy dest KURL dest = KChooseDir::getDir(i18n("Combining %1.* to directory:" ).arg( vfs::pathOrURL( baseURL ) ), ACTIVE_PANEL->otherPanel->virtualPath(), ACTIVE_PANEL->virtualPath()); if ( dest.isEmpty() ) return ; // the user canceled bool combineToOtherPanel = ( dest.equals( ACTIVE_PANEL->otherPanel->virtualPath(), true ) ); Combiner combine( MAIN_VIEW, baseURL, dest, unixStyle ); combine.combine(); if ( combineToOtherPanel ) ACTIVE_PANEL->otherPanel->func->refresh(); } void KRslots::userMenu() { //UserMenu um; //um.exec(); krApp->userMenu->exec(); } void KRslots::manageUseractions() { ActionMan actionMan( MAIN_VIEW ); } void KRslots::slotSynchronizeDirs( TQStringList selected ) { new SynchronizerGUI( 0, MAIN_VIEW->left->func->files()->vfs_getOrigin(), MAIN_VIEW->right->func->files()->vfs_getOrigin(), selected ); } void KRslots::slotSyncBrowse() { ACTIVE_PANEL->syncBrowseButton->toggle(); } void KRslots::updatePopupPanel(KrViewItem *item) { // which panel to display on? ListPanel *lp = 0; if (ACTIVE_PANEL->popup->isHidden() && ACTIVE_PANEL->otherPanel->popup->isHidden()) return; if (ACTIVE_PANEL->popup->isShown()) lp = ACTIVE_PANEL; else if (ACTIVE_PANEL->otherPanel->popup->isShown()) lp = ACTIVE_PANEL->otherPanel; KURL url; if (item->name()!="..") // updir url = ACTIVE_FUNC->files()->vfs_getFile(item->name()); lp->popup->update(url); } void KRslots::compareDirs() { ACTIVE_PANEL->compareDirs(); ACTIVE_PANEL->otherPanel->compareDirs(); } void KRslots::compareSetup() { for( int i=0; Krusader::compareArray[i] != 0; i++ ) if( (*Krusader::compareArray[i])->isChecked() ) { krConfig->setGroup( "Private" ); krConfig->writeEntry( "Compare Mode", i ); break; } } /** called by actions actExec* to choose the built-in command line mode */ void KRslots::execTypeSetup() { for( int i=0; Krusader::execTypeArray[i] != 0; i++ ) if( (*Krusader::execTypeArray[i])->isChecked() ) { if( *Krusader::execTypeArray[i] == Krusader::actExecTerminalEmbedded ){ // if commands are to be executed in the TE, it must be loaded MAIN_VIEW->createTE(); } TDEConfigGroup grp(krConfig, "Private" ); grp.writeEntry( "Command Execution Mode", i ); break; } } void KRslots::togglePopupPanel() { ACTIVE_PANEL->togglePanelPopup(); } void KRslots::slotDiskUsage() { DiskUsageGUI du( ACTIVE_FUNC->files()->vfs_getOrigin(), MAIN_VIEW, "DiskUsage" ); } // when window becomes focused, enable the refresh in the visible panels void KRslots::windowActive() { if( MAIN_VIEW != 0 ) { /* CRASH FIX: it's possible that the method is called after destroying the main view */ MAIN_VIEW->left->panelActive(); MAIN_VIEW->right->panelActive(); } } // when another application becomes focused, do a windows-commander style refresh: don't // refresh at all until krusader becomes focused again void KRslots::windowInactive() { if( MAIN_VIEW != 0 ) { /* CRASH FIX: it's possible that the method is called after destroying the main view */ MAIN_VIEW->left->panelInactive(); MAIN_VIEW->right->panelInactive(); } } void KRslots::slotLocationBar() { ACTIVE_PANEL->origin->lineEdit()->selectAll(); ACTIVE_PANEL->origin->setFocus(); } void KRslots::slotJumpBack() { ACTIVE_PANEL->jumpBack(); } void KRslots::slotSetJumpBack() { ACTIVE_PANEL->setJumpBack( ACTIVE_PANEL->virtualPath() ); } //shows the JavaScript-Console void KRslots::jsConsole() { #ifdef __KJSEMBED__ if ( ! krJS ) krJS = new KrJS(); krJS->view()->show(); #endif } void KRslots::bookmarkCurrent() { krBookMan->bookmarkCurrent(ACTIVE_PANEL->virtualPath()); } #include "krslots.moc"