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.
smb4k/smb4k/smb4k.cpp

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 *tqparent, const char *name )
: KParts::DockMainWindow( tqparent, 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" ).tqarg( 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..." ).tqarg( 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"