You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1020 lines
26 KiB
1020 lines
26 KiB
/***************************************************************************
|
|
smb4k.cpp - The main class of Smb4K.
|
|
-------------------
|
|
begin : Sam Mär 1 14:57:21 CET 2003
|
|
copyright : (C) 2003-2007 by Alexander Reinholdt
|
|
email : dustpuppy@users.berlios.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 *
|
|
***************************************************************************/
|
|
|
|
// TQt includes
|
|
#include <tqvaluelist.h>
|
|
#include <tqpopupmenu.h>
|
|
|
|
// KDE includes
|
|
#include <kstatusbar.h>
|
|
#include <kstdaction.h>
|
|
#include <klibloader.h>
|
|
#include <kmessagebox.h>
|
|
#include <kuniqueapplication.h>
|
|
#include <kiconloader.h>
|
|
#include <kactionclasses.h>
|
|
#include <klocale.h>
|
|
#include <kprogress.h>
|
|
#include <kconfigdialog.h>
|
|
#include <kaccel.h>
|
|
|
|
// application specific includes
|
|
#include "smb4k.h"
|
|
#include "smb4ksystemtray.h"
|
|
#include "dialogs/smb4kbookmarkeditor.h"
|
|
#include "core/smb4ksettings.h"
|
|
#include "core/smb4kcore.h"
|
|
#include "core/smb4kglobal.h"
|
|
#include "core/smb4kbookmark.h"
|
|
#include "core/smb4kshare.h"
|
|
#include "core/smb4kdefs.h"
|
|
|
|
using namespace Smb4KGlobal;
|
|
|
|
|
|
Smb4KApp::Smb4KApp( TQWidget *parent, const char *name )
|
|
: KParts::DockMainWindow( parent, name )
|
|
{
|
|
m_system_tray = NULL;
|
|
|
|
m_shares_part = NULL;
|
|
m_browser_part = NULL;
|
|
m_search_part = NULL;
|
|
|
|
// Set XML file:
|
|
setXMLFile( "smb4k_shell.rc" );
|
|
|
|
// Set up the actions.
|
|
setupActions();
|
|
|
|
// Set up the status bar:
|
|
setupStatusBar();
|
|
|
|
// Set up the view:
|
|
setupView();
|
|
|
|
// Setup all things that need to be done *after* createGUI()
|
|
// was run:
|
|
TQPopupMenu *settings = static_cast<TQPopupMenu *>( TQT_TQWIDGET(child( "settings", TQPOPUPMENU_OBJECT_NAME_STRING, true )) );
|
|
|
|
if ( settings )
|
|
{
|
|
settings->insertItem( i18n( "&Dock Widgets" ), dockHideShowMenu(), 3, 3 );
|
|
}
|
|
|
|
slotSetupBookmarksMenu();
|
|
|
|
// Set up the system tray window:
|
|
setupSystemTray();
|
|
|
|
// Resize main window (will be overwritten by configuration):
|
|
resize( 800, 600 );
|
|
|
|
// Apply main window settings:
|
|
applyMainWindowSettings( Smb4KSettings::self()->config(), "MainWindow" );
|
|
readDockConfig( Smb4KSettings::self()->config(), "MainWindow" );
|
|
|
|
// We have to set the tab labels here. The writeDockConfig()
|
|
// readDockConfig() combo will ignore changes of the localization,
|
|
// because the first labels will be saved and then loaded again
|
|
// and again.
|
|
KDockWidget *dock = NULL;
|
|
KDockTabGroup *parent_group = NULL;
|
|
|
|
if ( (dock = manager()->getDockWidgetFromName( "NetworkBrowser" )) != NULL )
|
|
{
|
|
dock->setTabPageLabel( i18n( "Network Browser" ) );
|
|
|
|
if ( (parent_group = dock->parentDockTabGroup()) != NULL )
|
|
{
|
|
parent_group->changeTab( dock, i18n( "Network Browser" ) );
|
|
}
|
|
}
|
|
|
|
if ( (dock = manager()->getDockWidgetFromName( "SearchDialog" )) != NULL )
|
|
{
|
|
dock->setTabPageLabel( i18n( "Search Dialog" ) );
|
|
|
|
if ( (parent_group = dock->parentDockTabGroup()) != NULL )
|
|
{
|
|
parent_group->changeTab( dock, i18n( "Search Dialog" ) );
|
|
}
|
|
}
|
|
|
|
// Connections
|
|
connect( actionCollection(), TQT_SIGNAL( actionHighlighted( KAction * ) ),
|
|
this, TQT_SLOT( slotActionHighlighted( KAction * ) ) );
|
|
|
|
connect( Smb4KCore::self(), TQT_SIGNAL( runStateChanged() ),
|
|
this, TQT_SLOT( slotRunStateChanged() ) );
|
|
|
|
connect( Smb4KCore::bookmarkHandler(), TQT_SIGNAL( bookmarksUpdated() ),
|
|
this, TQT_SLOT( slotSetupBookmarksMenu() ) );
|
|
|
|
connect( Smb4KCore::mounter(), TQT_SIGNAL( updated() ),
|
|
this, TQT_SLOT( slotShareListUpdated() ) );
|
|
}
|
|
|
|
|
|
Smb4KApp::~Smb4KApp()
|
|
{
|
|
}
|
|
|
|
|
|
void Smb4KApp::setupActions()
|
|
{
|
|
actionCollection()->setHighlightingEnabled( true );
|
|
|
|
(void) KStdAction::quit( TQT_TQOBJECT(this), TQT_SLOT( slotQuit() ), actionCollection(), "quit_action" );
|
|
|
|
// Set up the "Settings" menu:
|
|
setStandardToolBarMenuEnabled( true );
|
|
createStandardStatusBarAction();
|
|
|
|
KActionMenu *view_modes = new KActionMenu( i18n( "Shares Vie&w" ), "view_choose",
|
|
actionCollection(), "view_modes_menu" );
|
|
|
|
KRadioAction *icon_view = new KRadioAction( i18n( "&Icon View" ), "view_icon", CTRL+Key_I,
|
|
TQT_TQOBJECT(this), TQT_SLOT( slotChangeSharesView() ), actionCollection(), "icon_view_action" );
|
|
icon_view->setExclusiveGroup( "SharesViewActions" );
|
|
|
|
KRadioAction *list_view = new KRadioAction( i18n( "List Vie&w" ), "view_detailed", CTRL+Key_W,
|
|
TQT_TQOBJECT(this), TQT_SLOT( slotChangeSharesView() ), actionCollection(), "list_view_action" );
|
|
list_view->setExclusiveGroup( "SharesViewActions" );
|
|
|
|
switch ( Smb4KSettings::sharesView() )
|
|
{
|
|
case Smb4KSettings::EnumSharesView::IconView:
|
|
{
|
|
icon_view->setChecked( true );
|
|
|
|
break;
|
|
}
|
|
case Smb4KSettings::EnumSharesView::ListView:
|
|
{
|
|
list_view->setChecked( true );
|
|
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
view_modes->insert( icon_view, -1 );
|
|
view_modes->insert( list_view, -1 );
|
|
|
|
(void) KStdAction::preferences( TQT_TQOBJECT(this), TQT_SLOT( slotConfigDialog() ), actionCollection(), "configure_action" );
|
|
|
|
// Notes:
|
|
// (1) Actions from the parts will be included by setupView().
|
|
// (2) The list of dock widgets will be plugged into the menu
|
|
// by setupView().
|
|
// (3) The bookmark menu is managed by slotSetupBookmarksMenu().
|
|
}
|
|
|
|
|
|
void Smb4KApp::setupStatusBar()
|
|
{
|
|
// Insert the items:
|
|
statusBar()->insertItem( i18n( "Ready." ), Message, 1, false );
|
|
|
|
KProgress *progress = new KProgress( statusBar(), "StatusBarProgressBar", 0 );
|
|
progress->setFixedWidth( 75 );
|
|
progress->setFixedHeight( fontMetrics().height() );
|
|
progress->setPercentageVisible( false );
|
|
statusBar()->addWidget( progress, 0, true );
|
|
|
|
statusBar()->insertFixedItem( TQString( "Smb4K %1" ).arg( VERSION ), Version, true );
|
|
|
|
// Align the items:
|
|
statusBar()->setItemAlignment( Message, AlignAuto );
|
|
statusBar()->setItemAlignment( Progress, AlignCenter );
|
|
statusBar()->setItemAlignment( Version, AlignAuto );
|
|
}
|
|
|
|
|
|
void Smb4KApp::setupView()
|
|
{
|
|
//
|
|
// Main widget (shares view):
|
|
//
|
|
KLibFactory *shares_factory = NULL;
|
|
|
|
m_current_shares_view = Smb4KSettings::sharesView();
|
|
|
|
switch ( Smb4KSettings::sharesView() )
|
|
{
|
|
case Smb4KSettings::EnumSharesView::IconView:
|
|
{
|
|
shares_factory = KLibLoader::self()->factory( "libsmb4ksharesiconview" );
|
|
|
|
break;
|
|
}
|
|
case Smb4KSettings::EnumSharesView::ListView:
|
|
{
|
|
shares_factory = KLibLoader::self()->factory( "libsmb4kshareslistview" );
|
|
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( shares_factory )
|
|
{
|
|
m_shares_part = static_cast<KParts::Part *>( shares_factory->create( TQT_TQOBJECT(this), "SharesPart", "KParts::Part" ) );
|
|
|
|
if ( m_shares_part )
|
|
{
|
|
KDockWidget *main = createDockWidget( "SharesView", SmallIcon( "hdd_mount" ), 0L );
|
|
main->setWidget( m_shares_part->widget() );
|
|
main->setDockSite( KDockWidget::DockCorner );
|
|
main->setEnableDocking( KDockWidget::DockNone );
|
|
setView( main );
|
|
setMainDockWidget( main );
|
|
|
|
createGUI( m_shares_part );
|
|
|
|
accel()->insert( i18n( "Jump to shares view" ), CTRL+Key_3, TQT_TQOBJECT(this), TQT_SLOT( slotJumpToSharesView() ), false, true );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
KMessageBox::error( 0, "<qt>"+KLibLoader::self()->lastErrorMessage()+"</qt>" );
|
|
|
|
KApplication::exit( 0 );
|
|
|
|
return;
|
|
}
|
|
|
|
//
|
|
// Browser widget:
|
|
//
|
|
KLibFactory *browser_factory = KLibLoader::self()->factory( "libsmb4knetworkbrowser" );
|
|
|
|
if ( browser_factory )
|
|
{
|
|
m_browser_part = static_cast<KParts::Part *>( browser_factory->create( TQT_TQOBJECT(this), "BrowserPart", "KParts::Part" ) );
|
|
|
|
if ( m_browser_part )
|
|
{
|
|
KDockWidget *network = createDockWidget( "NetworkBrowser", SmallIcon( "network" ), 0L, i18n( "Network Browser" ) );
|
|
network->setWidget( m_browser_part->widget() );
|
|
network->manualDock( getMainDockWidget(), KDockWidget::DockLeft, 45 );
|
|
|
|
factory()->addClient( m_browser_part );
|
|
|
|
accel()->insert( i18n( "Jump to network browser" ), CTRL+Key_1, TQT_TQOBJECT(this), TQT_SLOT( slotJumpToNetworkBrowser() ), false, true );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
KMessageBox::error( 0, "<qt>"+KLibLoader::self()->lastErrorMessage()+"</qt>" );
|
|
|
|
KApplication::exit( 0 );
|
|
|
|
return;
|
|
}
|
|
|
|
//
|
|
// Search dialog
|
|
//
|
|
KLibFactory *search_factory = KLibLoader::self()->factory( "libsmb4ksearchdialog" );
|
|
|
|
if ( search_factory )
|
|
{
|
|
m_search_part = static_cast<KParts::Part *>( search_factory->create( TQT_TQOBJECT(this), "SearchDialogPart", "KParts::Part" ) );
|
|
|
|
if ( m_search_part )
|
|
{
|
|
KDockWidget *search = createDockWidget( "SearchDialog", SmallIcon( "find" ), 0L, i18n( "Search Dialog" ) );
|
|
search->setWidget( m_search_part->widget() );
|
|
|
|
KDockWidget *network = manager()->getDockWidgetFromName( "NetworkBrowser" );
|
|
|
|
if ( network )
|
|
{
|
|
search->manualDock( network, KDockWidget::DockCenter, 0 );
|
|
}
|
|
else
|
|
{
|
|
search->manualDock( getMainDockWidget(), KDockWidget::DockLeft, 45 );
|
|
}
|
|
|
|
factory()->addClient( m_search_part );
|
|
|
|
accel()->insert( i18n( "Jump to search dialog" ), CTRL+Key_2, TQT_TQOBJECT(this), TQT_SLOT( slotJumpToSearchDialog() ), false, true );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
KMessageBox::error( 0, "<qt>"+KLibLoader::self()->lastErrorMessage()+"</qt>" );
|
|
|
|
KApplication::exit( 0 );
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
void Smb4KApp::setupSystemTray()
|
|
{
|
|
if ( !m_system_tray )
|
|
{
|
|
m_system_tray = new Smb4KSystemTray( this, "SystemTray" );
|
|
}
|
|
|
|
connect( m_system_tray, TQT_SIGNAL( quitSelected() ),
|
|
this, TQT_SLOT( slotQuit() ) );
|
|
|
|
connect( m_system_tray, TQT_SIGNAL( settingsChanged() ),
|
|
this, TQT_SLOT( slotSettingsChanged() ) );
|
|
|
|
m_system_tray->embed( Smb4KSettings::embedIntoSystemTray() );
|
|
}
|
|
|
|
|
|
void Smb4KApp::changeSharesView()
|
|
{
|
|
// Change the information about the current view:
|
|
m_current_shares_view = Smb4KSettings::sharesView();
|
|
|
|
// Save dock widget settings:
|
|
writeDockConfig( Smb4KSettings::self()->config(), "MainWindow" );
|
|
|
|
// Clear the shares view
|
|
factory()->removeClient( m_shares_part );
|
|
|
|
KDockWidget *dock = NULL;
|
|
|
|
if ( (dock = manager()->getDockWidgetFromName( "SharesView" )) != NULL )
|
|
{
|
|
delete dock;
|
|
}
|
|
|
|
// Load the new shares view:
|
|
KLibFactory *shares_factory = NULL;
|
|
|
|
switch ( Smb4KSettings::sharesView() )
|
|
{
|
|
case Smb4KSettings::EnumSharesView::IconView:
|
|
{
|
|
shares_factory = KLibLoader::self()->factory( "libsmb4ksharesiconview" );
|
|
|
|
break;
|
|
}
|
|
case Smb4KSettings::EnumSharesView::ListView:
|
|
{
|
|
shares_factory = KLibLoader::self()->factory( "libsmb4kshareslistview" );
|
|
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( shares_factory )
|
|
{
|
|
m_shares_part = static_cast<KParts::Part *>( shares_factory->create( TQT_TQOBJECT(this), "SharesPart", "KParts::Part" ) );
|
|
|
|
if ( m_shares_part )
|
|
{
|
|
KDockWidget *main = createDockWidget( "SharesView", SmallIcon( "hdd_mount" ), this );
|
|
main->setWidget( m_shares_part->widget() );
|
|
main->setDockSite( KDockWidget::DockCorner );
|
|
main->setEnableDocking( KDockWidget::DockNone );
|
|
setView( main );
|
|
setMainDockWidget( main );
|
|
|
|
factory()->addClient( m_shares_part );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
KMessageBox::error( 0, "<qt>"+KLibLoader::self()->lastErrorMessage()+"</qt>" );
|
|
|
|
KApplication::exit( 0 );
|
|
|
|
return;
|
|
}
|
|
|
|
// Apply the settings to the dock widgets:
|
|
readDockConfig( Smb4KSettings::self()->config(), "MainWindow" );
|
|
}
|
|
|
|
|
|
bool Smb4KApp::queryExit()
|
|
{
|
|
Smb4KSettings::setStartMainWindowDocked( !isVisible() );
|
|
|
|
saveMainWindowSettings( Smb4KSettings::self()->config(), "MainWindow" );
|
|
writeDockConfig( Smb4KSettings::self()->config(), "MainWindow" );
|
|
|
|
hide();
|
|
|
|
if ( m_system_tray )
|
|
{
|
|
delete m_system_tray;
|
|
m_system_tray = NULL;
|
|
}
|
|
|
|
// Save any options here that have to be written directly
|
|
// before the application exits:
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
bool Smb4KApp::queryClose()
|
|
{
|
|
if ( !kapp->sessionSaving() && isVisible() && m_system_tray->isEmbedded() &&
|
|
Smb4KSettings::embedIntoSystemTray() )
|
|
{
|
|
// This part has been 'stolen' from JuK application.
|
|
KMessageBox::information(this,
|
|
i18n( "Closing the main window will keep Smb4K running in the system tray. "
|
|
"Use \"Quit\" from the \"File\" menu to quit the application."),
|
|
i18n( "Docking in System Tray" ), "ClosingMainWindowInfo" );
|
|
|
|
hide();
|
|
|
|
return false;
|
|
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
void Smb4KApp::timerEvent( TQTimerEvent * )
|
|
{
|
|
KProgress *progress_bar = static_cast<KProgress *>( TQT_TQWIDGET(child( "StatusBarProgressBar", "KProgress", true )) );
|
|
|
|
if ( progress_bar )
|
|
{
|
|
progress_bar->setProgress( progress_bar->progress() + 1 );
|
|
}
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// TQT_SLOT IMPLEMENTATIONS
|
|
/////////////////////////////////////////////////////////////////////
|
|
|
|
void Smb4KApp::slotQuit()
|
|
{
|
|
statusBar()->changeItem( i18n( "Exiting..." ), Message );
|
|
|
|
if ( m_system_tray->isEmbedded() )
|
|
{
|
|
m_system_tray->embed( false );
|
|
}
|
|
|
|
KApplication::exit( 0 );
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotChangeSharesView()
|
|
{
|
|
// Let's be sure that the last action that was highlighted is
|
|
// indeed an action that changes the shares view:
|
|
TQString action_name;
|
|
|
|
if ( m_action )
|
|
{
|
|
action_name = TQString( m_action->name() );
|
|
|
|
if ( TQString::compare( action_name, "icon_view_action" ) != 0 &&
|
|
TQString::compare( action_name, "list_view_action" ) != 0 )
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
|
|
KRadioAction *shares_view_action = static_cast<KRadioAction *>( m_action );
|
|
|
|
// Set the check mark for the action:
|
|
if ( !shares_view_action->isChecked() )
|
|
{
|
|
shares_view_action->setChecked( true );
|
|
}
|
|
else
|
|
{
|
|
// Do nothing
|
|
}
|
|
|
|
// Change the shares view setting and save it:
|
|
if ( TQString::compare( action_name, "icon_view_action" ) == 0 )
|
|
{
|
|
Smb4KSettings::setSharesView( Smb4KSettings::EnumSharesView::IconView );
|
|
}
|
|
else if ( TQString::compare( action_name, "list_view_action" ) == 0 )
|
|
{
|
|
Smb4KSettings::setSharesView( Smb4KSettings::EnumSharesView::ListView );
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
|
|
Smb4KSettings::writeConfig();
|
|
|
|
changeSharesView();
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotConfigDialog()
|
|
{
|
|
// If the config dialog is already created and cached,
|
|
// we do not create a new one but show the old instead:
|
|
if ( KConfigDialog::showDialog( "ConfigDialog" ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Load the factory of the config dialog:
|
|
KLibFactory *config_factory = KLibLoader::self()->factory( "libsmb4kconfigdialog" );
|
|
|
|
if ( config_factory )
|
|
{
|
|
KConfigDialog *dlg = static_cast<KConfigDialog *>( TQT_TQWIDGET(config_factory->create( TQT_TQOBJECT(this), "ConfigDialog", "KConfigDialog" )) );
|
|
|
|
if ( dlg )
|
|
{
|
|
connect( dlg, TQT_SIGNAL( settingsChanged() ), TQT_TQOBJECT(this), TQT_SLOT( slotSettingsChanged() ) );
|
|
|
|
dlg->show();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
KMessageBox::error( 0, "<qt>"+KLibLoader::self()->lastErrorMessage()+"</qt>" );
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotSettingsChanged()
|
|
{
|
|
// Adjust settings for the system tray widget:
|
|
if ( m_system_tray )
|
|
{
|
|
m_system_tray->loadSettings();
|
|
m_system_tray->embed( Smb4KSettings::embedIntoSystemTray() );
|
|
}
|
|
|
|
// (Re-)Load the correct shares view.
|
|
if ( m_current_shares_view != Smb4KSettings::sharesView() )
|
|
{
|
|
changeSharesView();
|
|
}
|
|
else
|
|
{
|
|
// Do nothing
|
|
}
|
|
|
|
// Notify the parts to reload the settings.
|
|
// Note: TQApplication::postEvent() will delete the TQCustomEvent pointers.
|
|
TQApplication::postEvent( m_browser_part, new TQCustomEvent( EVENT_LOAD_SETTINGS ) );
|
|
TQApplication::postEvent( m_search_part, new TQCustomEvent( EVENT_LOAD_SETTINGS ) );
|
|
TQApplication::postEvent( m_shares_part, new TQCustomEvent( EVENT_LOAD_SETTINGS ) );
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotBookmarkEditor()
|
|
{
|
|
Smb4KBookmarkEditor *dlg = static_cast<Smb4KBookmarkEditor *>( TQT_TQWIDGET(child( "BookmarkEditor", "Smb4KBookmarkEditor", true )) );
|
|
|
|
if ( !dlg )
|
|
{
|
|
dlg = new Smb4KBookmarkEditor( this, "BookmarkEditor" );
|
|
}
|
|
|
|
dlg->show();
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotRunStateChanged()
|
|
{
|
|
// Get the progress bar:
|
|
KProgress *progress_bar = static_cast<KProgress *>( TQT_TQWIDGET(child( "StatusBarProgressBar", "KProgress", true )) );
|
|
|
|
// Clear the status bar:
|
|
statusBar()->clear();
|
|
|
|
// Set the status bar message:
|
|
switch( Smb4KCore::currentState() )
|
|
{
|
|
case SCANNER_INIT:
|
|
{
|
|
switch ( Smb4KSettings::browseList() )
|
|
{
|
|
case Smb4KSettings::EnumBrowseList::LookupDomains:
|
|
{
|
|
statusBar()->changeItem( i18n( "Looking up workgroups and domains..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case Smb4KSettings::EnumBrowseList::QueryCurrentMaster:
|
|
{
|
|
statusBar()->changeItem( i18n( "Querying current master browser..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case Smb4KSettings::EnumBrowseList::QueryCustomMaster:
|
|
{
|
|
statusBar()->changeItem( i18n( "Querying master browser %1..." ).arg( Smb4KSettings::customMasterBrowser().upper() ), Message );
|
|
|
|
break;
|
|
}
|
|
case Smb4KSettings::EnumBrowseList::ScanBroadcastAreas:
|
|
{
|
|
statusBar()->changeItem( i18n( "Scanning broadcast areas..." ), Message );
|
|
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
case SCANNER_OPENING_WORKGROUP:
|
|
{
|
|
statusBar()->changeItem( i18n( "Opening workgroup..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case SCANNER_OPENING_HOST:
|
|
{
|
|
statusBar()->changeItem( i18n( "Retrieving list of shares..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case SCANNER_RETRIEVING_INFO:
|
|
{
|
|
statusBar()->changeItem( i18n( "Retrieving additional information..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case SCANNER_SEARCHING:
|
|
{
|
|
statusBar()->changeItem( i18n( "Searching..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case SCANNER_RETRYING_OPENING_HOST:
|
|
{
|
|
statusBar()->changeItem( i18n( "Retrying to retrieve list of shares..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case SCANNER_STOP:
|
|
{
|
|
statusBar()->changeItem( i18n( "Done." ), Message );
|
|
|
|
break;
|
|
}
|
|
case MOUNTER_MOUNTING:
|
|
{
|
|
statusBar()->changeItem( i18n( "Mounting share..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case MOUNTER_UNMOUNTING:
|
|
{
|
|
statusBar()->changeItem( i18n( "Unmounting share..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case MOUNTER_STOP:
|
|
{
|
|
statusBar()->changeItem( i18n( "Done." ), Message );
|
|
|
|
break;
|
|
}
|
|
case PRINT_START:
|
|
{
|
|
statusBar()->changeItem( i18n( "Printing file..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case PRINT_STOP:
|
|
{
|
|
statusBar()->changeItem( i18n( "Done." ), Message );
|
|
|
|
break;
|
|
}
|
|
case SYNCHRONIZER_START:
|
|
{
|
|
statusBar()->changeItem( i18n( "Synchronizing data..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case SYNCHRONIZER_STOP:
|
|
{
|
|
statusBar()->changeItem( i18n( "Done." ), Message );
|
|
|
|
break;
|
|
}
|
|
case PREVIEWER_START:
|
|
{
|
|
statusBar()->changeItem( i18n( "Generating preview..." ), Message );
|
|
|
|
break;
|
|
}
|
|
case PREVIEWER_STOP:
|
|
{
|
|
statusBar()->changeItem( i18n( "Done." ), Message );
|
|
|
|
break;
|
|
}
|
|
case CORE_STOP:
|
|
{
|
|
statusBar()->changeItem( i18n( "Ready." ), Message );
|
|
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Set up the progress bar:
|
|
if ( Smb4KCore::isRunning() )
|
|
{
|
|
// If the progress bar exists and is already set to
|
|
// a totalSteps == 0, we do not need to do anything
|
|
// here.
|
|
if ( progress_bar && progress_bar->totalSteps() != 0 )
|
|
{
|
|
progress_bar->setTotalSteps( 0 );
|
|
|
|
m_timer_id = startTimer( TIMER_INTERVAL );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( progress_bar )
|
|
{
|
|
killTimer( m_timer_id );
|
|
|
|
progress_bar->setTotalSteps( 100 );
|
|
progress_bar->reset();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotSetupBookmarksMenu()
|
|
{
|
|
// Set up bookmark related actions:
|
|
TQValueList<Smb4KBookmark *> bookmarks = Smb4KCore::bookmarkHandler()->getBookmarks();
|
|
|
|
if ( !actionCollection()->action( "edit_bookmarks_action" ) )
|
|
{
|
|
unplugActionList( "bookmark_actions" );
|
|
|
|
TQPtrList<KAction> bookmark_actions;
|
|
|
|
// Create the "Edit Bookmarks" action:
|
|
bookmark_actions.append( new KAction( i18n( "&Edit Bookmarks" ), "bookmark", CTRL+Key_E,
|
|
TQT_TQOBJECT(this), TQT_SLOT( slotBookmarkEditor() ), actionCollection(),
|
|
"edit_bookmarks_action" ) );
|
|
|
|
// Get the "Add Bookmark" action from the browser:
|
|
TQPtrList<KXMLGUIClient> clients_list = factory()->clients();
|
|
|
|
for ( TQPtrList<KXMLGUIClient>::Iterator it = clients_list.begin(); it != clients_list.end(); ++it )
|
|
{
|
|
if ( (*it)->action( "bookmark_action" ) )
|
|
{
|
|
bookmark_actions.append( (*it)->action( "bookmark_action" ) );
|
|
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
bookmark_actions.append( new KActionSeparator() );
|
|
|
|
plugActionList( "bookmark_actions", bookmark_actions );
|
|
}
|
|
|
|
// Unplug the action list:
|
|
unplugActionList( "bookmarks" );
|
|
|
|
// Get the bookmark action list and delete all entries. We could
|
|
// also try to keep those actions that are not obsolete, but I think
|
|
// this is the cleanest way.
|
|
KActionPtrList list = actionCollection()->actions( "Bookmarks" );
|
|
|
|
for ( KActionPtrList::Iterator it = list.begin(); it != list.end(); ++it )
|
|
{
|
|
actionCollection()->remove( *it );
|
|
}
|
|
|
|
// Set up the menu:
|
|
if ( bookmarks.isEmpty() )
|
|
{
|
|
actionCollection()->action( "edit_bookmarks_action" )->setEnabled( false );
|
|
}
|
|
else
|
|
{
|
|
actionCollection()->action( "edit_bookmarks_action" )->setEnabled( true );
|
|
|
|
// Work around sorting problems:
|
|
TQStringList display_strings;
|
|
|
|
for ( TQValueListIterator<Smb4KBookmark *> it = bookmarks.begin(); it != bookmarks.end(); ++it )
|
|
{
|
|
if ( !(*it)->label().isEmpty() && Smb4KSettings::showCustomBookmarkLabel() )
|
|
{
|
|
display_strings.append( (*it)->label() );
|
|
}
|
|
else
|
|
{
|
|
display_strings.append( (*it)->bookmark() );
|
|
}
|
|
}
|
|
|
|
display_strings.sort();
|
|
|
|
// Create the bookmark list and plug it into the menu:
|
|
TQPtrList<KAction> bookmark_list;
|
|
|
|
for ( TQStringList::ConstIterator it = display_strings.begin(); it != display_strings.end(); ++it )
|
|
{
|
|
KAction *a = new KAction( *it, "folder", KShortcut::null(), 0, 0, actionCollection(), *it );
|
|
a->setGroup( "Bookmarks" );
|
|
connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( slotBookmarkActivated() ) );
|
|
bookmark_list.append( a );
|
|
}
|
|
|
|
plugActionList( "bookmarks", bookmark_list );
|
|
}
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotBookmarkActivated()
|
|
{
|
|
if ( m_action && TQString::compare( m_action->group(), "Bookmarks" ) == 0 )
|
|
{
|
|
Smb4KBookmark *bookmark = NULL;
|
|
|
|
if ( !m_action->plainText().startsWith( "//" ) )
|
|
{
|
|
bookmark = Smb4KCore::bookmarkHandler()->findBookmarkByLabel( m_action->plainText() );
|
|
}
|
|
else
|
|
{
|
|
bookmark = Smb4KCore::bookmarkHandler()->findBookmarkByName( m_action->plainText() );
|
|
}
|
|
|
|
if ( bookmark )
|
|
{
|
|
Smb4KCore::mounter()->mountShare( bookmark->workgroup(), bookmark->host(),
|
|
bookmark->ip(), bookmark->share() );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Do nothing
|
|
}
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotShareListUpdated()
|
|
{
|
|
KActionPtrList list = actionCollection()->actions( "Bookmarks" );
|
|
|
|
if ( !list.isEmpty() )
|
|
{
|
|
TQString name;
|
|
|
|
for ( KActionPtrList::ConstIterator it = list.begin(); it != list.end(); ++it )
|
|
{
|
|
if ( !(*it)->plainText().startsWith( "//" ) )
|
|
{
|
|
Smb4KBookmark *bookmark = Smb4KCore::bookmarkHandler()->findBookmarkByLabel( (*it)->plainText() );
|
|
|
|
name = bookmark->bookmark();
|
|
}
|
|
else
|
|
{
|
|
name = (*it)->plainText();
|
|
}
|
|
|
|
TQValueList<Smb4KShare> share_list = Smb4KCore::mounter()->findShareByName( name );
|
|
|
|
bool enable = true;
|
|
|
|
for ( TQValueList<Smb4KShare>::ConstIterator i = share_list.begin(); i != share_list.end(); ++i )
|
|
{
|
|
if ( !(*i).isForeign() )
|
|
{
|
|
enable = false;
|
|
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
(*it)->setEnabled( enable );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotActionHighlighted( KAction *action )
|
|
{
|
|
m_action = action;
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotJumpToNetworkBrowser()
|
|
{
|
|
KDockWidget *dock = NULL;
|
|
|
|
if ( (dock = manager()->getDockWidgetFromName( "NetworkBrowser" )) != NULL &&
|
|
dock->isHidden() )
|
|
{
|
|
manager()->getDockWidgetFromName( "NetworkBrowser" )->changeHideShowState();
|
|
}
|
|
|
|
// Send a custom focus event to the browser, that tells it to set
|
|
// the focus to the list view widget.
|
|
TQApplication::postEvent( m_browser_part, new TQCustomEvent( EVENT_SET_FOCUS ) );
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotJumpToSearchDialog()
|
|
{
|
|
KDockWidget *dock = NULL;
|
|
|
|
if ( (dock = manager()->getDockWidgetFromName( "SearchDialog" )) != NULL &&
|
|
dock->isHidden() )
|
|
{
|
|
manager()->getDockWidgetFromName( "SearchDialog" )->changeHideShowState();
|
|
}
|
|
|
|
// Send a custom focus event to the search dialog, that tells it
|
|
// to set the focus to the combo box in the tool bar.
|
|
TQApplication::postEvent( m_search_part, new TQCustomEvent( EVENT_SET_FOCUS ) );
|
|
}
|
|
|
|
|
|
void Smb4KApp::slotJumpToSharesView()
|
|
{
|
|
// Send a custom focus event to the shares view, that tells it
|
|
// to set the focus to its main widget.
|
|
TQApplication::postEvent( m_shares_part, new TQCustomEvent( EVENT_SET_FOCUS ) );
|
|
}
|
|
|
|
#include "smb4k.moc"
|
|
|