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.
digikam/digikam/libs/widgets/common/sidebar.h

179 lines
3.8 KiB

/* ============================================================
*
* This file is a part of digiKam project
* http://www.digikam.org
*
* Date : 2005-03-22
* Description : a widget to manage sidebar in gui.
*
* Copyright (C) 2005-2006 by Joern Ahrens <joern.ahrens@kdemail.net>
* Copyright (C) 2006-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
*
* 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, 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.
*
* ============================================================ */
/** @file sidebar.h */
#ifndef _SIDEBAR_H_
#define _SIDEBAR_H_
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
// KDE includes.
#include <tdemultitabbar.h>
// Local includes.
#include "digikam_export.h"
class TQSplitter;
namespace Digikam
{
class SidebarPriv;
/**
* This class handles a sidebar view
*/
class DIGIKAM_EXPORT Sidebar : public KMultiTabBar
{
TQ_OBJECT
public:
/**
* The side where the bar should be visible
*/
enum Side
{
Left,
Right
};
/**
* Creates a new sidebar
* @param parent sidebar's parent
* @param name the name of the widget is used to store its state to config
* @param side where the sidebar should be displayed. At the left or right border.
* @param minimizedDefault hide the sidebar when the program is started the first time?
*/
Sidebar(TQWidget *parent, const char *name, Side side=Left, bool mimimizedDefault=false);
virtual ~Sidebar();
/**
* The width of the widget stack can be changed by a TQSplitter.
* @param sp sets the splitter, which should handle the width. The splitter normally
* is part of the main view.
*/
void setSplitter(TQSplitter *sp);
void setSplitterSizePolicy(TQSizePolicy p);
TQSplitter* splitter() const;
/**
* Appends a new tab to the sidebar
* @param w widget which is activated by this tab
* @param pic icon which is shown in this tab
* @param title text which is shown it this tab
*/
void appendTab(TQWidget *w, const TQPixmap &pic, const TQString &title);
/**
* Deletes a tab from the tabbar
*/
void deleteTab(TQWidget *w);
/**
* Activates a tab
*/
void setActiveTab(TQWidget *w);
/**
* Returns the currently activated tab, or 0 if no tab is active
*/
TQWidget* getActiveTab();
/**
* Hides the sidebar (display only the activation buttons)
*/
void shrink();
/**
* redisplays the whole sidebar
*/
void expand();
/**
* load the last view state from disk
*/
void loadViewState();
/**
* hide sidebar and backup minimized state.
*/
void backup();
/**
* show sidebar and restore minimized state.
*/
void restore();
/**
* return the visible status of current sidebar tab.
*/
bool isExpanded();
private:
/**
* save the view state to disk
*/
void saveViewState();
bool eventFilter(TQObject *o, TQEvent *e);
void updateMinimumWidth();
private slots:
/**
* Activates a tab
*/
void clicked(int tab);
void slotDragSwitchTimer();
signals:
/**
* is emitted, when another tab is activated
*/
void signalChangedTab(TQWidget *w);
/**
* is emitted, when tab is shrink or expanded
*/
void signalViewChanged();
private:
SidebarPriv* d;
};
} // namespace Digikam
#endif // _SIDEBAR_H_