• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • superkaramba
 

superkaramba

textlabel.cpp

00001 /***************************************************************************
00002  *   Copyright (C) 2003 by Hans Karlsson                                   *
00003  *   karlsson.h@home.se                                                    *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  ***************************************************************************/
00010 
00011 #include <krun.h>
00012 #include <stdlib.h>
00013 #include "textlabel.h"
00014 
00015 TextLabel::TextLabel(karamba *k, int x,int y,int w,int h):
00016   Meter(k, x,y,w,h), alignment(TQt::AlignLeft), clip(0), bgColor(0, 0, 0),
00017   lineHeight(0), shadow(0), scrollSpeed(0, 0), scrollPos(0, 0), scrollGap(0),
00018   scrollPause(0), pauseCounter(0), scrollType(ScrollNone)
00019 {
00020     calculateTextSize();
00021     if( h != 0 || w != 0)
00022         clip = 0;
00023     else
00024         clip = TQt::DontClip;
00025 
00026     if( h == 0 || w == 0)
00027     {
00028         setWidth(-1);
00029         setHeight(-1);
00030     }
00031 }
00032 
00033 TextLabel::TextLabel(karamba *k):
00034   Meter(k, 0, 0, 0, 0), alignment(TQt::AlignLeft), clip(0), bgColor(0, 0, 0),
00035   lineHeight(0), shadow(0), scrollSpeed(0, 0), scrollPos(0, 0), scrollGap(0),
00036   scrollPause(0), pauseCounter(0), scrollType(ScrollNone)
00037 {
00038 }
00039 
00040 TextLabel::~TextLabel()
00041 {
00042 }
00043 
00044 void TextLabel::show()
00045 {
00046   Meter::show();
00047   setEnabled(true);
00048 }
00049 
00050 void TextLabel::hide()
00051 {
00052   Meter::hide();
00053   setEnabled(false);
00054 }
00055 
00056 void TextLabel::setTextProps( TextField* t )
00057 {
00058   if(t)
00059   {
00060     text = *t;
00061     //lineHeight = t->getLineHeight();
00062     shadow = t->getShadow();
00063     alignment = t->getAlignment();
00064     setFontSize(t->getFontSize());
00065     setFont(t->getFont());
00066 
00067     setColor(t->getColor());
00068     setBGColor(t->getBGColor());
00069   }
00070   calculateTextSize();
00071 }
00072 
00073 void TextLabel::calculateTextSize()
00074 {
00075   int tmp;
00076   TQFontMetrics fm(font);
00077   lineHeight = fm.height();
00078   textSize.setWidth(0);
00079   textSize.setHeight(lineHeight * value.count());
00080   TQStringList::Iterator it = value.begin();
00081   while(it != value.end())
00082   {
00083     tmp = fm.width(*it);
00084     if(tmp > textSize.width())
00085       textSize.setWidth(tmp);
00086     ++it;
00087   }
00088 }
00089 
00090 void TextLabel::setValue( TQString text)
00091 {
00092     value = TQStringList::split('\n',text);
00093     calculateTextSize();
00094 }
00095 
00096 void TextLabel::setValue( long v)
00097 {
00098     value = TQStringList( TQString::number( v ) );
00099     calculateTextSize();
00100 }
00101 
00102 void TextLabel::setBGColor(TQColor clr)
00103 {
00104     bgColor = clr;
00105 }
00106 
00107 TQColor TextLabel::getBGColor() const
00108 {
00109     return bgColor;
00110 }
00111 
00112 void TextLabel::setFont(TQString f)
00113 {
00114     font.setFamily(f);
00115     calculateTextSize();
00116 }
00117 
00118 TQString TextLabel::getFont() const
00119 {
00120     return font.family();
00121 }
00122 
00123 void TextLabel::setFontSize(int size)
00124 {
00125     font.setPixelSize(size);
00126     calculateTextSize();
00127 }
00128 
00129 int TextLabel::getFontSize() const
00130 {
00131     return font.pixelSize();
00132 }
00133 
00134 void TextLabel::setAlignment( TQString align )
00135 {
00136     TQString a = align.upper();
00137     if( a == "LEFT" || a.isEmpty() )
00138         alignment = TQt::AlignLeft;
00139     if( a == "RIGHT" )
00140         alignment = TQt::AlignRight;
00141     if( a == "CENTER" )
00142         alignment = TQt::AlignHCenter;
00143 }
00144 
00145 TQString TextLabel::getAlignment() const
00146 {
00147     if( alignment == TQt::AlignHCenter )
00148         return "CENTER";
00149     else if( alignment == TQt::AlignRight )
00150         return "RIGHT";
00151     else
00152         return "LEFT";
00153 }
00154 
00155 void TextLabel::setFixedPitch( bool fp)
00156 {
00157     font.setFixedPitch( fp );
00158 }
00159 
00160 bool TextLabel::getFixedPitch() const
00161 {
00162     return font.fixedPitch();
00163 }
00164 
00165 void TextLabel::setShadow ( int s )
00166 {
00167     shadow = s;
00168 }
00169 
00170 int TextLabel::getShadow() const
00171 {
00172     return shadow;
00173 }
00174 
00175 void TextLabel::setScroll(char* type, TQPoint speed, int gap, int pause)
00176 {
00177   ScrollType t = TextLabel::ScrollNone;
00178   TQString a = type;
00179   a = a.upper();
00180   if(a == "NONE")
00181     t = TextLabel::ScrollNone;
00182   else if( a == "NORMAL" )
00183     t = TextLabel::ScrollNormal;
00184   else if( a == "BACKANDFORTH" )
00185     t = TextLabel::ScrollBackAndForth;
00186   else if( a == "ONEPASS" )
00187     t = TextLabel::ScrollOnePass;
00188   setScroll(t, speed, gap, pause);
00189 }
00190 
00191 void TextLabel::setScroll(ScrollType type, TQPoint speed, int gap, int pause)
00192 {
00193   scrollType = type;
00194   scrollSpeed = speed;
00195   switch(scrollType)
00196   {
00197     case ScrollNormal:
00198     case ScrollOnePass:
00199     {
00200       int x = 0, y = 0;
00201 
00202       if(speed.x() > 0)
00203         x = -1 * textSize.width();
00204       else if(speed.x() < 0)
00205         x = getWidth()-1;
00206       if(speed.y() > 0)
00207         x = -1 * textSize.height();
00208       else if(speed.y() < 0)
00209         x = getHeight()-1;
00210       scrollPos = TQPoint(x,y);
00211       break;
00212     }
00213     case ScrollNone:
00214     case ScrollBackAndForth:
00215     default:
00216       scrollPos = TQPoint(0,0);
00217       break;
00218   }
00219   scrollGap = gap;
00220   scrollPause = pause;
00221   pauseCounter = 1;
00222 }
00223 
00224 int TextLabel::drawText(TQPainter *p, int x, int y, int width, int height,
00225                         TQString text)
00226 {
00227   if( shadow != 0)
00228   {
00229     p->setPen(getBGColor());
00230     p->drawText(x + shadow, y + shadow, width, height,
00231                 alignment | clip | TQt::ExpandTabs, text);
00232   }
00233   p->setPen(getColor());
00234   p->drawText(x, y, width, height, alignment | clip | TQt::ExpandTabs, text);
00235   return 0;
00236 }
00237 
00238 bool TextLabel::calculateScrollCoords(TQRect meterRect, TQRect &textRect,
00239                                         TQPoint &next, int &x, int &y)
00240 {
00241   if(scrollType == ScrollBackAndForth &&
00242      (scrollSpeed.x() != 0 && textSize.width() < getWidth() ||
00243       scrollSpeed.y() != 0 && textSize.height() < getHeight()))
00244     return true;
00245 
00246   x += scrollPos.x();
00247   y += scrollPos.y();
00248 
00249   if(pauseCounter < 1)
00250   {
00251     scrollPos += scrollSpeed;
00252 
00253     // -1 | 0 | 1
00254     TQPoint direction(scrollSpeed.x()/abs((scrollSpeed.x() == 0)?
00255                        1:scrollSpeed.x()),
00256                      scrollSpeed.y()/abs((scrollSpeed.y() == 0)?
00257                        1:scrollSpeed.y()));
00258     next = TQPoint(-1 * direction.x() * (scrollGap + textSize.width()),
00259                   -1 * direction.y() * (scrollGap + textSize.height()));
00260     textRect.setCoords(x, y, x + textSize.width(), y + textSize.height());
00261 
00262     if(scrollType == ScrollBackAndForth)
00263     {
00264       if(direction.x() < 0 && textRect.right() <= meterRect.right() ||
00265          direction.x() > 0 && textRect.left() >= meterRect.left())
00266       {
00267         scrollSpeed.setX(scrollSpeed.x() * -1);
00268         pauseCounter = scrollPause;
00269       }
00270       if(direction.y() < 0 && textRect.bottom() <= meterRect.bottom() ||
00271          direction.y() > 0 && textRect.top() >= meterRect.top())
00272       {
00273         scrollSpeed.setY(scrollSpeed.y() * -1);
00274         pauseCounter = scrollPause;
00275       }
00276     }
00277     else if(!textRect.intersects(meterRect))
00278     {
00279       if(scrollType == ScrollNormal)
00280         scrollPos += next;
00281       else if(scrollType == ScrollOnePass)
00282         return false;
00283     }
00284   }
00285   else
00286     --pauseCounter;
00287   return true;
00288 }
00289 
00290 void TextLabel::mUpdate(TQPainter *p)
00291 {
00292   if (hidden != 1)
00293   {
00294     int i = 0; //lineHeight;
00295     int row = 1;
00296     int x = getX();
00297     int y = getY();
00298     int width = getWidth();
00299     int height = getHeight();
00300     TQRect meterRect(x, y, width, height);
00301     TQRect textRect;
00302     TQPoint next;
00303 
00304     p->setFont(font);
00305     if(scrollType != ScrollNone)
00306     {
00307       p->setClipRect(x, y, width, height);
00308       if(!calculateScrollCoords(meterRect, textRect, next, x, y))
00309       {
00310         p->setClipping(false);
00311         return;
00312       }
00313       width = textSize.width();
00314       height = textSize.height();
00315     }
00316     TQStringList::Iterator it = value.begin();
00317     while(it != value.end() && (row <= height || height == -1 ))
00318     {
00319       drawText(p, x, y + i, width, height, *it);
00320 
00321       // Draw more instances of text if scroll type is normal scroll
00322       if(scrollType == ScrollNormal)
00323       {
00324         textRect.addCoords(next.x(), next.y(), next.x(), next.y());
00325         while(textRect.intersects(meterRect))
00326         {
00327           drawText(p, textRect.x(), textRect.y() + i, width, height, *it);
00328           textRect.addCoords(next.x(), next.y(), next.x(), next.y());
00329         }
00330       }
00331       i += lineHeight;
00332       it++;
00333       row++;
00334     }
00335     if(scrollType != ScrollNone)
00336       p->setClipping(false);
00337   }
00338 }
00339 
00340 bool TextLabel::click(TQMouseEvent* e)
00341 {
00342     if (getBoundingBox().contains(e -> x(), e -> y()) && isEnabled())
00343     {
00344         TQString program;
00345         if (e -> button() == Qt::LeftButton)
00346         {
00347             program = leftButtonAction;
00348         }
00349         else if (e -> button() == Qt::MidButton)
00350         {
00351             program = middleButtonAction;
00352         }
00353         else if (e -> button() == Qt::RightButton)
00354         {
00355             program = rightButtonAction;
00356         }
00357 
00358         if( !program.isEmpty() )
00359         {
00360             KRun::runCommand(program);
00361         }
00362         else
00363         {
00364           return true;
00365         }
00366     }
00367     return false;
00368 }
00369 
00370 void TextLabel::attachClickArea(TQString leftMouseButton,
00371                                 TQString middleMouseButton,
00372                                 TQString rightMouseButton)
00373 {
00374     leftButtonAction = leftMouseButton;
00375     middleButtonAction = middleMouseButton;
00376     rightButtonAction = rightMouseButton;
00377 }
00378 
00379 #include "textlabel.moc"

superkaramba

Skip menu "superkaramba"
  • Main Page
  • Alphabetical List
  • Class List
  • File List
  • Class Members

superkaramba

Skip menu "superkaramba"
  • kcalc
  •   knumber
  • superkaramba
Generated for superkaramba by doxygen 1.6.3
This website is maintained by Timothy Pearson.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. |