⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ktabbar.cpp

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CPP
字号:
/*  This file is part of the KDE Libraries    Copyright (C) 1998 Thomas Tanghus (tanghus@earthling.net)    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Library General Public    License as published by the Free Software Foundation; either    version 2 of the License, or (at your option) any later version.    This library 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    Library General Public License for more details.    You should have received a copy of the GNU Library General Public License    along with this library; see the file COPYING.LIB.  If not, write to    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,    Boston, MA 02111-1307, USA.*/  #include "ktabbar.h"struct KTabBarProtected{    QTabBar *qtab;    QWidget *tabw;    KTabButton *right;    KTabButton *left;    bool rightscroll;    bool leftscroll;    int tpos;    int t_width;    int tw_width;    int tw_height;    int tw_start;};KTabBar::KTabBar(QWidget *parent, const char *name) : QWidget(parent, name){  initMetaObject();  init();}KTabBar::~KTabBar(){  //debug("KTabBar - destructor");  //debug("KTabBar - destructor done");}void KTabBar::init(){  ptab = new KTabBarProtected;  ptab->tpos = 0;  ptab->leftscroll = ptab->rightscroll = false;  ptab->tabw = new QWidget(this);  ptab->qtab = new QTabBar(ptab->tabw);  ptab->left = new KTabButton(LeftArrow, this);  connect( ptab->left, SIGNAL(clicked()), SLOT( leftClicked()) );  ptab->right = new KTabButton(RightArrow, this);  connect( ptab->right, SIGNAL(clicked()), SLOT( rightClicked()) );  connect( ptab->qtab, SIGNAL(selected(int)), SLOT( emitSelected(int)) );  //debug("init - done");}QTabBar *KTabBar::getQTab(){  return ptab->qtab;}QSize KTabBar::sizeHint(){  return ptab->qtab->sizeHint();}int KTabBar::addTab( QTab *tab ){  return ptab->qtab->addTab( tab );}void KTabBar::setTabEnabled( int tab, bool enable ){  ptab->qtab->setTabEnabled( tab, enable );}bool KTabBar::isTabEnabled( int tab ){  return ptab->qtab->isTabEnabled( tab );}int KTabBar::currentTab(){  return ptab->qtab->currentTab();}QTab *KTabBar::tab( int tab ){  return ptab->qtab->tab( tab );}int KTabBar::keyboardFocusTab(){  return ptab->qtab->keyboardFocusTab();}void KTabBar::setCurrentTab(int tab){  ptab->qtab->setCurrentTab(tab);}void KTabBar::setCurrentTab(QTab *tab){  ptab->qtab->setCurrentTab(tab);}void KTabBar::leftClicked(){  if(ptab->tpos == (0-(2*JUMP)))    ptab->tpos += (2 * JUMP);  else    ptab->tpos += JUMP;  QResizeEvent e(size(), size());  resizeEvent(&e);  emit scrolled( RightArrow );}void KTabBar::rightClicked(){  if(ptab->tpos == 0)    ptab->tpos -= (2 * JUMP);  else    ptab->tpos -= JUMP;  QResizeEvent e(size(), size());  resizeEvent(&e);  emit scrolled( LeftArrow );}void KTabBar::emitSelected(int tab){  emit selected(tab);}void KTabBar::setSizes(){  ptab->leftscroll = ptab->rightscroll = false;  ptab->tw_width = width();  ptab->t_width = ptab->qtab->sizeHint().width();  if(ptab->tw_width > ptab->t_width)    ptab->tw_width = ptab->t_width;  ptab->tw_height = ptab->qtab->sizeHint().height();  ptab->tw_start = 0;  int r = 0;  //debug("width: %d - t_width: %d", width(), ptab->t_width);  //debug("tpos %d", ptab->tpos);  if(width() >= ptab->t_width)    ptab->tpos = 0;  else  {    if(ptab->tpos < 0)    {      //debug("leftscroll");      ptab->leftscroll = true;      ptab->tw_start = ptab->tw_height;      ptab->tw_width -= ptab->tw_start;      r = ptab->tw_height;    }    if(width() < (ptab->t_width + ptab->tpos + ptab->tw_start))    {      //debug("rightscroll");      ptab->rightscroll = true;      ptab->tw_width -= ptab->tw_height;    }  }  if(ptab->tw_width > (ptab->t_width+ptab->tpos))    ptab->tw_width = ptab->t_width + ptab->tpos;  //debug("tw_width %d", tw_width);  //debug("\n");}void KTabBar::resizeEvent(QResizeEvent *){  //debug("KTabBar, resizing");  setSizes();  if(ptab->leftscroll)  {    ptab->left->setGeometry( 0, 0, ptab->tw_height, ptab->tw_height);    ptab->left->show();  }  else    ptab->left->hide();  if(ptab->rightscroll)  {    ptab->right->setGeometry( width()-ptab->tw_height, 0,                              ptab->tw_height, ptab->tw_height);    ptab->right->show();  }  else    ptab->right->hide();  ptab->tabw->setGeometry( ptab->tw_start, 0,                           ptab->tw_width, ptab->tw_height);  ptab->qtab->setGeometry( ptab->tpos, 0,                           ptab->qtab->sizeHint().width(), ptab->tw_height);  //debug("KTabBar\ntabw: %dx%d\nqtab: %dx%d", tw_width, tw_height,  //                          qtab->sizeHint().width(), tw_height);  QPaintEvent pe(geometry());  paintEvent( &pe );  //debug("KTabBar, resize - done");}void KTabBar::paintEvent(QPaintEvent *){  //debug("KTabBar - painting");  int end = width()-1;  int start = ptab->tw_width + ptab->tpos;  //debug("width: %d - start: %d", width(), start);  if(ptab->leftscroll)  // if we need a left button we start the tabs at tw_height    start = ptab->tw_height; // ( tw_height == left->width() )  //start = 0;  if(ptab->rightscroll)    end -= ptab->tw_height;  //debug("width: %d", width());  //debug("tw_width: %d", tw_width);  //debug("tw_start: %d", tw_start);  //debug("2*tw_height + tw_width: %d", (2*tw_height)+tw_width);  //debug("start: %d - end: %d", start, end);  QPainter p;  // start painting widget  p.begin(this);  QPen pen( white, 1 );  p.setPen( pen );  // draw bottom line  if(start < end)    p.drawLine( start, ptab->tw_height-1, end, ptab->tw_height-1);  p.end();  //qtab->repaint();  //debug("KTabBar - painting done");}#include "ktabbar.moc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -