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

📄 knewpanner.cpp

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CPP
字号:
// $Id: knewpanner.cpp,v 1.1 2003/09/08 19:42:09 jasonk Exp $/* This file is part of the KDE libraries    Copyright (C) 1997 Richard Moore (moorer@cs.man.ac.uk)    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 "knewpanner.h"#include <stdio.h>#ifdef HAVE_CONFIG_H#include <config.h>#endifKNewPanner::KNewPanner(QWidget *parent, const char *name,			   Orientation orient, Units units, int pos)    : QWidget(parent, name){    orientation= orient;    currentunits= units;    position= pos;    initialised= false;    showlabels= false;    startHeight= 0;    label0= 0;    label1= 0;}KNewPanner::~KNewPanner(){}void KNewPanner::activate(QWidget *c0, QWidget *c1){    int minx, maxx, miny, maxy, pos;    child0= c0;    child1= c1;    // Set the minimum and maximum sizes    if (orientation == Horizontal) {	miny= c0->minimumSize().height() + c1->minimumSize().height()+4;	maxy= c0->maximumSize().height() + c1->maximumSize().height()+4;	minx= (c0->minimumSize().width() > c1->minimumSize().width())	    ? c0->minimumSize().width() : c1->minimumSize().width();	maxx= (c0->maximumSize().width() > c1->maximumSize().width())	    ? c0->maximumSize().width() : c1->maximumSize().width();	miny= (miny > 4) ? miny : 4;	maxy= (maxy < 2000) ? maxy : 2000;	minx= (minx > 2) ? minx : 2;	maxx= (maxx < 2000) ? maxx : 2000;	setMinimumSize(minx, miny);	setMaximumSize(maxx, maxy);    }    else {	minx= c0->minimumSize().width() + c1->minimumSize().width()+4;	maxx= c0->maximumSize().width() + c1->maximumSize().width()+4;	miny= (c0->minimumSize().height() > c1->minimumSize().height())	    ? c0->minimumSize().height() : c1->minimumSize().height();	maxy= (c0->maximumSize().height() > c1->maximumSize().height())	    ? c0->maximumSize().height() : c1->maximumSize().height();	minx= (minx > 4) ? minx : 4;	maxx= (maxx < 2000) ? maxx : 2000;	miny= (miny > 2) ? miny : 2;	maxy= (maxy < 2000) ? maxy : 2000;	setMinimumSize(minx, miny);	setMaximumSize(maxx, maxy);    }    divider= new QFrame(this, "pannerdivider");    divider->setFrameStyle(QFrame::Panel | QFrame::Raised);    divider->setLineWidth(1);    divider->raise();    if (orientation == Horizontal)        divider->setCursor(QCursor(sizeVerCursor));    else        divider->setCursor(QCursor(sizeHorCursor));    divider->installEventFilter(this);    initialised= true;    pos= position;    position=0;    setSeparatorPos(pos);}void KNewPanner::deactivate(){  delete divider;  initialised= false;}void KNewPanner::setLabels(const char *text0, const char *text1){   if (label0 == 0) {      label0= new QLabel(this, "label0");      label0->setFrameStyle(QFrame::Sunken | QFrame::Panel);   }   if (label1 == 0) {      label1= new QLabel(this, "label1");      label1->setFrameStyle(QFrame::Sunken | QFrame::Panel);   }   label0->setText(text0);   label1->setText(text1);   label0->adjustSize();   label1->adjustSize();   if (!showlabels) {      label0->hide();      label1->hide();   }         if (showlabels && initialised) {      resizeEvent(0);   }}void KNewPanner::showLabels(bool newval){  if (orientation == Vertical)    showlabels= newval;   if ((label0 == 0) || (label1 == 0))     setLabels("", "");   if (showlabels) {      label0->show();      label1->show();   }   else {      label0->hide();      label1->hide();   }  if (initialised && showlabels) {     label0->adjustSize();     label1->adjustSize();  }  if (initialised)     resizeEvent(0);}int KNewPanner::seperatorPos(){  //  fprintf(stderr,  //	  "seperatorPos() is deprecated, use separatorPos() insead.\n");  return separatorPos();}void KNewPanner::setSeperatorPos(int pos){  //  fprintf(stderr,  //	  "setSeperatorPos() is deprecated, use setSeparatorPos() insead.\n");  setSeparatorPos(pos);}int KNewPanner::absSeperatorPos(){  //  fprintf(stderr,  //  "absSeperatorPos() is deprecated, use absSeparatorPos() insead.\n");  return absSeparatorPos();}void KNewPanner::setAbsSeperatorPos(int pos, bool do_resize){  //  fprintf(stderr,  //  "setAbsSeperatorPos() is deprecated, use setAbsSeparatorPos() insead.\n");  setAbsSeparatorPos(pos, do_resize);}int KNewPanner::separatorPos(){  return position;}void KNewPanner::setSeparatorPos(int pos){  position = pos;}void KNewPanner::setAbsSeparatorPos(int pos, bool do_resize){    pos= checkValue(pos);    if (pos != absSeparatorPos()) {      if (currentunits == Percent)	position= pos * 100 / (orientation == Vertical?width():height());      else	position= pos;      if (do_resize)	resizeEvent(0);    }}int KNewPanner::absSeparatorPos(){    int value;    if (currentunits == Percent)	value= (orientation == Vertical?width():height())*position/100;    else	value= position;	        return value;}KNewPanner::Units KNewPanner::units(){    return currentunits;}void KNewPanner::setUnits(Units u){    currentunits= u;}void KNewPanner::resizeEvent(QResizeEvent*){  if (initialised) {     if (orientation == Horizontal) {      child0->setGeometry(0, 0, width(), absSeparatorPos());      child1->setGeometry(0, absSeparatorPos()+4, width(), 			  height()-absSeparatorPos()-4);      divider->setGeometry(0, absSeparatorPos(), width(), 4);    }    else {      if (showlabels) {	label0->move(0,0);	label0->resize(absSeparatorPos(), label0->height());	label1->move(absSeparatorPos()+4, 0);	label1->resize(width()-absSeparatorPos()-4, label1->height());	startHeight= label0->height();      }      else {	 startHeight= 0;      }      child0->setGeometry(0, startHeight, absSeparatorPos(), 			  (height())-startHeight);      child1->setGeometry(absSeparatorPos()+4, startHeight,			  (width())-(absSeparatorPos()+4), 			  (height())-startHeight);      divider->setGeometry(absSeparatorPos(), startHeight, 4, 			   (height())-startHeight);    }  }}int KNewPanner::checkValue(int pos){   if (initialised) {    if (orientation == Vertical) {	if (pos < (child0->minimumSize().width()))	    pos= child0->minimumSize().width();	if ((width()-4-pos) < (child1->minimumSize().width()))	    pos= width() - (child1->minimumSize().width()) -4;    }    else {	if (pos < (child0->minimumSize().height()))	    pos= (child0->minimumSize().height());	if ((height()-4-pos) < (child1->minimumSize().height()))	    pos= height() - (child1->minimumSize().height()) -4;    }   }       if (pos < 0) pos= 0;   if ((orientation == Vertical) && (pos > width()))     pos= width();   if ((orientation == Horizontal) && (pos > height()))     pos= height();    return pos;}bool KNewPanner::eventFilter(QObject *, QEvent *e){    QMouseEvent *mev;    bool handled= false;    switch (e->type()) {    case Event_MouseMove:	mev= (QMouseEvent *)e;	child0->setUpdatesEnabled(false);	child1->setUpdatesEnabled(false);	if (orientation == Horizontal) {	    setAbsSeparatorPos(divider->mapToParent(mev->pos()).y(), false);	    divider->setGeometry(0, absSeparatorPos(), width(), 4);	    divider->repaint(0);	}	else {	    setAbsSeparatorPos(divider->mapToParent(mev->pos()).x(), false);	    divider->setGeometry(absSeparatorPos(), 0, 4, height());	    divider->repaint(0);	}	handled= true;	break;    case Event_MouseButtonRelease:	mev= (QMouseEvent *)e;	child0->setUpdatesEnabled(true);	child1->setUpdatesEnabled(true);	if (orientation == Horizontal) {	    resizeEvent(0);// 	    child0->repaint(true);// 	    child1->repaint(true);	    divider->repaint(true);	}	else {	    resizeEvent(0);// 	    child0->repaint(true);// 	    child1->repaint(true);	    divider->repaint(true);	}	handled= true;	break;    }    return handled;}#include "knewpanner.moc"

⌨️ 快捷键说明

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