/***************************************************************************
    smb4k.h  -  The main class of Smb4K.
                             -------------------
    begin                : Sam M�  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                                                    *
 ***************************************************************************/

#ifndef SMB4K_H
#define SMB4K_H

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

// KDE includes
#include <tdeaction.h>
#include <tdeparts/dockmainwindow.h>

// Forward declarations
class Smb4KSystemTray;

/**
 * This is the application shell of Smb4K.
 *
 * @author Alexander Reinholdt <dustpuppy@users.berlios.de>
 */

class Smb4KApp : public KParts::DockMainWindow
{
  Q_OBJECT
  

  public:
    /**
     * The constructor.
     *
     * @param parent        The parent of this widget
     *
     * @param name          The name of this widget
     */
    Smb4KApp( TQWidget *parent = 0, const char *name = 0 );

    /**
     * The destructor.
     */
    ~Smb4KApp();

  protected:
    /**
     * Reimplemented from TDEMainWindow.
     */
    bool queryExit();

    /**
     * Reimplemented from TDEMainWindow.
     */
    bool queryClose();

    /**
     * Reimplemented from TQObject
     */
    void timerEvent( TQTimerEvent *e );

  protected slots:
    /**
     * Quit the application.
     */
    void slotQuit();

    /**
     * Replace the current shares view.
     */
    void slotChangeSharesView();

    /**
     * Open the configuration dialog. This slot is connected to the "Configure Smb4K..."
     * action.
     */
    void slotConfigDialog();

    /**
     * This slot is invoked when the config dialog is closed and the settings have
     * been changed. Emits the reloadSettings() signal and adjusts the system tray
     * widget to the new settings afterwards.
     */
    void slotSettingsChanged();

    /**
     * Open the bookmark editor. This slot is connected to the "Edit Bookmarks"
     * action.
     */
    void slotBookmarkEditor();

    /**
     * Show a message to the user what currently is done by the application. This
     * slot is connected to the Smb4KCore::runStateChanged() signal.
     */
    void slotRunStateChanged();

    /**
     * This slot is invoked when the bookmarks have been updated. It inserts the
     * bookmarks into the menu. Additionally, it enables the "Edit Bookmarks"
     * action if there are bookmarks and else disables it.
     */
    void slotSetupBookmarksMenu();

    /**
     * This slot is invoked when/if a bookmark is activated.
     */
    void slotBookmarkActivated();

    /**
     * This slot is activated when the list of mounted shares has been updated.
     * It is connected to the Smb4KMounter::updated() signal.
     */
    void slotShareListUpdated();

    /**
     * This slot is activated when an action is highlighted and lets m_action
     * point to it. No validity checks are performed.
     *
     * @param action        The action that has been highlighted
     */
    void slotActionHighlighted( TDEAction *action );

    /**
     * This slot sets the keyboard focus to the network browser and shows it
     * if it is not already shown.
     */
    void slotJumpToNetworkBrowser();

    /**
     * This slot sets the keyboard focus to the search dialog and shows it
     * if it is not already shown.
     */
    void slotJumpToSearchDialog();

    /**
     * This slot sets the keyboard focus to the shares view. Since it is the
     * main widget, this slot does not care about it being hidden.
     */
    void slotJumpToSharesView();

  private:
    /**
     * Set up actions.
     */
    void setupActions();

    /**
     * Set up the view.
     */
    void setupView();

    /**
     * Set up the status bar
     */
    void setupStatusBar();

    /**
     * Set up the system tray
     */
    void setupSystemTray();

    /**
     * Change the shares view.
     */
    void changeSharesView();

    /**
     * The shares view part
     */
    KParts::Part *m_shares_part;

    /**
     * The browser part
     */
    KParts::Part *m_browser_part;

    /**
     * The search dialog part
     */
    KParts::Part *m_search_part;

    /**
     * The system tray icon of this application
     */
    Smb4KSystemTray *m_system_tray;

    /**
     * Enumeration for the status bar
     */
    enum StatusBarItem{ Message = 0, Progress = 1, Version = 2 };

    /**
     * The currently highlighted TDEAction.
     */
    TDEAction *m_action;

    /**
     * This holds the config entry of the current shares
     * view. This is used to avoid unnecessary loading.
     */
    int m_current_shares_view;

    /**
     * The timer id
     */
    int m_timer_id;
};

#endif
