|
|
|
/**************************************************************************************
|
|
|
|
begin : Fri 18-06-2004
|
|
|
|
edit : Wed 1 Jun 2006
|
|
|
|
copyright : (C) 2004 by Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)
|
|
|
|
(C) 2006 by Thomas Braun (braun@physik.fu-berlin.de)
|
|
|
|
(C) 2006 by Michel Ludwig (michel.ludwig@kdemail.net)
|
|
|
|
**************************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* 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 "kilesidebar.h"
|
|
|
|
|
|
|
|
#include <tqwidgetstack.h>
|
|
|
|
#include <tqlayout.h>
|
|
|
|
|
|
|
|
#include <kdeversion.h>
|
|
|
|
#include "kiledebug.h"
|
|
|
|
#include "kilemultitabbar.h"
|
|
|
|
|
|
|
|
#include "symbolview.h"
|
|
|
|
|
|
|
|
KileSideBar::KileSideBar(int size, TQWidget *tqparent, const char *name, Qt::Orientation orientation /*=Qt::Vertical*/) :
|
|
|
|
TQFrame(tqparent, name),
|
|
|
|
m_nTabs(0),
|
|
|
|
m_nCurrent(0),
|
|
|
|
m_bMinimized(false),
|
|
|
|
m_nMinSize(0),
|
|
|
|
m_nMaxSize(1000),
|
|
|
|
m_nSize(size)
|
|
|
|
{
|
|
|
|
setLineWidth(0);
|
|
|
|
tqsetSizePolicy(TQSizePolicy::Ignored, TQSizePolicy::Ignored);
|
|
|
|
|
|
|
|
TQLayout *tqlayout;
|
|
|
|
|
|
|
|
m_tabStack = new TQWidgetStack(this);
|
|
|
|
m_tabStack->tqsetSizePolicy(TQSizePolicy::Ignored, TQSizePolicy::Ignored);
|
|
|
|
|
|
|
|
KileMultiTabBar::KileMultiTabBarMode tabbarori = KileMultiTabBar::Horizontal;
|
|
|
|
KileMultiTabBar::KileMultiTabBarPosition tabbarpos = KileMultiTabBar::Top;
|
|
|
|
if ( orientation == Qt::Horizontal )
|
|
|
|
{
|
|
|
|
tqlayout = new TQVBoxLayout(this);
|
|
|
|
tabbarori = KileMultiTabBar::Horizontal;
|
|
|
|
tabbarpos = KileMultiTabBar::Top;
|
|
|
|
}
|
|
|
|
else if ( orientation == Qt::Vertical )
|
|
|
|
{
|
|
|
|
tqlayout = new TQHBoxLayout(this);
|
|
|
|
tabbarori = KileMultiTabBar::Vertical;
|
|
|
|
tabbarpos = KileMultiTabBar::Right;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_tabBar = new KileMultiTabBar(tabbarori, this);
|
|
|
|
m_tabBar->setPosition(tabbarpos);
|
|
|
|
|
|
|
|
#if KDE_VERSION >= KDE_MAKE_VERSION(3,3,0)
|
|
|
|
m_tabBar->setStyle(KileMultiTabBar::KDEV3ICON);
|
|
|
|
#else
|
|
|
|
m_tabBar->setStyle(KileMultiTabBar::KDEV3);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
if ( orientation == Qt::Horizontal )
|
|
|
|
{
|
|
|
|
setMinimumHeight(m_tabBar->height());
|
|
|
|
m_nMinSize = m_tabBar->height();
|
|
|
|
m_nMaxSize = m_tabBar->maximumHeight();
|
|
|
|
tqlayout->add(m_tabBar);
|
|
|
|
tqlayout->add(m_tabStack);
|
|
|
|
}
|
|
|
|
else if ( orientation == Qt::Vertical )
|
|
|
|
{
|
|
|
|
setMinimumWidth(m_tabBar->width());
|
|
|
|
m_nMinSize = m_tabBar->width();
|
|
|
|
m_nMaxSize = m_tabBar->maximumWidth();
|
|
|
|
tqlayout->add(m_tabStack);
|
|
|
|
tqlayout->add(m_tabBar);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
KileSideBar::~KileSideBar()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
int KileSideBar::addTab(TQWidget *tab, const TQPixmap &pic, const TQString &text /* = TQString()*/)
|
|
|
|
{
|
|
|
|
m_widgetToIndex[tab] = m_nTabs;
|
|
|
|
|
|
|
|
m_tabBar->appendTab(pic, m_nTabs, text);
|
|
|
|
m_tabStack->addWidget(tab, m_nTabs);
|
|
|
|
connect(m_tabBar->tab(m_nTabs), TQT_SIGNAL(clicked(int)), this, TQT_SLOT(showTab(int)));
|
|
|
|
|
|
|
|
return m_nTabs++;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void KileSideBar::setVisible(bool show)
|
|
|
|
{
|
|
|
|
KILE_DEBUG() << "==KileSideBar::setVisible(" << show << ")===========" << endl;
|
|
|
|
if (show) expand();
|
|
|
|
else shrink();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KileSideBar::shrink()
|
|
|
|
{
|
|
|
|
if ( !isVisible() ) return;
|
|
|
|
|
|
|
|
m_bMinimized = true;
|
|
|
|
|
|
|
|
m_nSize = width();
|
|
|
|
m_nMinSize = minimumWidth();
|
|
|
|
m_nMaxSize = maximumWidth();
|
|
|
|
|
|
|
|
m_tabStack->hide();
|
|
|
|
setFixedWidth(m_tabBar->width());
|
|
|
|
|
|
|
|
emit visibilityChanged(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KileSideBar::expand()
|
|
|
|
{
|
|
|
|
if ( isVisible() ) return;
|
|
|
|
|
|
|
|
m_bMinimized = false;
|
|
|
|
|
|
|
|
m_tabStack->show();
|
|
|
|
|
|
|
|
resize(m_nSize, height());
|
|
|
|
setMinimumWidth(m_nMinSize);
|
|
|
|
setMaximumWidth(m_nMaxSize);
|
|
|
|
|
|
|
|
emit visibilityChanged(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
TQWidget* KileSideBar::currentPage()
|
|
|
|
{
|
|
|
|
return m_tabStack->visibleWidget();
|
|
|
|
}
|
|
|
|
|
|
|
|
int KileSideBar::findNextShownTab(int i)
|
|
|
|
{
|
|
|
|
if(m_nTabs <= 0)
|
|
|
|
{
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
for(int j = 1; j < m_nTabs; ++j)
|
|
|
|
{
|
|
|
|
int index = (i + j) % m_nTabs;
|
|
|
|
if(m_tabBar->tab(index)->isShown())
|
|
|
|
{
|
|
|
|
return index;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KileSideBar::removePage(TQWidget *w)
|
|
|
|
{
|
|
|
|
TQMap<TQWidget*,int>::iterator it = m_widgetToIndex.find(w);
|
|
|
|
if(it == m_widgetToIndex.end())
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
int index = *it;
|
|
|
|
m_tabStack->removeWidget(w);
|
|
|
|
disconnect(m_tabBar->tab(index), TQT_SIGNAL(clicked(int)), this, TQT_SLOT(showTab(int)));
|
|
|
|
m_tabBar->removeTab(index);
|
|
|
|
m_widgetToIndex.remove(it);
|
|
|
|
if(index == m_nCurrent && m_nTabs >= 2)
|
|
|
|
{
|
|
|
|
showTab(findNextShownTab(index));
|
|
|
|
}
|
|
|
|
--m_nTabs;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KileSideBar::setPageVisible(TQWidget *w, bool b) {
|
|
|
|
TQMap<TQWidget*,int>::iterator it = m_widgetToIndex.find(w);
|
|
|
|
if(it == m_widgetToIndex.end())
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
int index = *it;
|
|
|
|
KileMultiTabBarTab *tab = m_tabBar->tab(index);
|
|
|
|
if(tab->isShown() == b) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
tab->setShown(b);
|
|
|
|
if(!b && index == m_nCurrent && m_nTabs >= 2)
|
|
|
|
{
|
|
|
|
showTab(findNextShownTab(index));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KileSideBar::showPage(TQWidget *widget)
|
|
|
|
{
|
|
|
|
if ( m_widgetToIndex.contains(widget) )
|
|
|
|
switchToTab(m_widgetToIndex[widget]);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KileSideBar::showTab(int id)
|
|
|
|
{
|
|
|
|
if(id >= m_nTabs || id < 0)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if ( id != m_nCurrent)
|
|
|
|
{
|
|
|
|
switchToTab(id);
|
|
|
|
if (m_bMinimized) expand();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
toggleTab();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KileSideBar::toggleTab()
|
|
|
|
{
|
|
|
|
if (m_bMinimized) expand();
|
|
|
|
else shrink();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KileSideBar::switchToTab(int id)
|
|
|
|
{
|
|
|
|
if(id >= m_nTabs || id < 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
m_tabBar->setTab(m_nCurrent, false);
|
|
|
|
m_tabBar->setTab(id, true);
|
|
|
|
|
|
|
|
m_tabStack->raiseWidget(id);
|
|
|
|
|
|
|
|
m_nCurrent = id;
|
|
|
|
}
|
|
|
|
|
|
|
|
KileBottomBar::KileBottomBar(int size, TQWidget *tqparent, const char *name) :
|
|
|
|
KileSideBar(size, tqparent, name, Qt::Horizontal)
|
|
|
|
{}
|
|
|
|
|
|
|
|
void KileBottomBar::shrink()
|
|
|
|
{
|
|
|
|
m_bMinimized = true;
|
|
|
|
|
|
|
|
m_nSize = height();
|
|
|
|
m_nMinSize = minimumHeight();
|
|
|
|
m_nMaxSize = maximumHeight();
|
|
|
|
|
|
|
|
m_tabStack->hide();
|
|
|
|
setFixedHeight(m_tabBar->height());
|
|
|
|
|
|
|
|
emit visibilityChanged(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KileBottomBar::expand()
|
|
|
|
{
|
|
|
|
m_bMinimized = false;
|
|
|
|
|
|
|
|
m_tabStack->show();
|
|
|
|
|
|
|
|
resize(width(), m_nSize);
|
|
|
|
setMinimumHeight(m_nMinSize);
|
|
|
|
setMaximumHeight(m_nMaxSize);
|
|
|
|
|
|
|
|
emit visibilityChanged(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "kilesidebar.moc"
|