kmdichildfrmcaption.cpp
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 #include "kmdichildfrmcaption.h"
00029 #include "kmdichildfrmcaption.moc"
00030 
00031 #include <qpainter.h>
00032 #include <qapplication.h>
00033 #include <qcursor.h>
00034 #include <qtoolbutton.h>
00035 #include <qpopupmenu.h>
00036 
00037 #include "kmdidefines.h"
00038 #include "kmdichildfrm.h"
00039 #include "kmdichildarea.h"
00040 #include "kmdimainfrm.h"
00041 #include <klocale.h>
00042 #include <iostream>
00044 
00045 
00046 
00047 
00049 
00050 
00051 
00052 KMdiChildFrmCaption::KMdiChildFrmCaption(KMdiChildFrm *parent)
00053 :QWidget(parent, "kmdi_childfrmcaption")
00054 {
00055    m_szCaption    = i18n("Unnamed");
00056    m_bActive      = false;
00057    m_pParent      = parent;
00058    setBackgroundMode(NoBackground);
00059    setFocusPolicy(NoFocus);
00060    m_bChildInDrag = false;
00061 }
00062 
00063 
00064 
00065 KMdiChildFrmCaption::~KMdiChildFrmCaption()
00066 {
00067 }
00068 
00069 
00070 
00071 void KMdiChildFrmCaption::mousePressEvent(QMouseEvent *e)
00072 {
00073    if ( e->button() == LeftButton) {
00074       setMouseTracking(false);
00075       if (KMdiMainFrm::frameDecorOfAttachedViews() != KMdi::Win95Look) {
00076          QApplication::setOverrideCursor(Qt::sizeAllCursor,true);
00077       }
00078       m_pParent->m_bDragging = true;
00079       m_offset = mapToParent( e->pos());
00080    }
00081    else if ( e->button() == RightButton) {
00082       m_pParent->systemMenu()->popup( mapToGlobal( e->pos()));
00083    }
00084 }
00085 
00086 
00087 
00088 void KMdiChildFrmCaption::mouseReleaseEvent(QMouseEvent *e)
00089 {
00090    if ( e->button() == LeftButton) {
00091       if (KMdiMainFrm::frameDecorOfAttachedViews() != KMdi::Win95Look)
00092          QApplication::restoreOverrideCursor();
00093       releaseMouse();
00094       if(m_pParent->m_bDragging) {
00095          m_pParent->m_bDragging = false;
00096          if (m_bChildInDrag) {
00097             
00098             KMdiChildFrmDragEndEvent ue(e);
00099             if( m_pParent->m_pClient != 0L) {
00100                QApplication::sendEvent( m_pParent->m_pClient, &ue);
00101             }
00102             m_bChildInDrag = false;
00103          }
00104       }
00105    }
00106 }
00107 
00108 
00109 void KMdiChildFrmCaption::mouseMoveEvent(QMouseEvent *e)
00110 {
00111    if ( !m_pParent->m_bDragging ) {
00112       return;
00113    }
00114 
00115    if (!m_bChildInDrag) {
00116       
00117       KMdiChildFrmDragBeginEvent ue(e);
00118       if( m_pParent->m_pClient != 0L) {
00119          QApplication::sendEvent( m_pParent->m_pClient, &ue);
00120       }
00121       m_bChildInDrag = true;
00122    }
00123 
00124    QPoint relMousePosInChildArea = m_pParent->m_pManager->mapFromGlobal( e->globalPos() );
00125 
00126    
00127    if ( !m_pParent->m_pManager->rect().contains( relMousePosInChildArea)) {
00128       if ( relMousePosInChildArea.x() < 0)
00129          relMousePosInChildArea.rx() = 0;
00130       if ( relMousePosInChildArea.y() < 0)
00131          relMousePosInChildArea.ry() = 0;
00132       if ( relMousePosInChildArea.x() > m_pParent->m_pManager->width())
00133          relMousePosInChildArea.rx() = m_pParent->m_pManager->width();
00134       if ( relMousePosInChildArea.y() > m_pParent->m_pManager->height())
00135          relMousePosInChildArea.ry() = m_pParent->m_pManager->height();
00136    }
00137    QPoint mousePosInChildArea = relMousePosInChildArea - m_offset;
00138 
00139    
00140    parentWidget()->move( mousePosInChildArea);
00141 }
00142 
00143 
00144 
00145 void KMdiChildFrmCaption::setActive(bool bActive)
00146 {
00147    if( m_bActive == bActive)
00148       return;
00149 
00150    
00151    m_pParent->m_pWinIcon->setBackgroundColor(bActive
00152    ? m_pParent->m_pManager->m_captionActiveBackColor
00153    : m_pParent->m_pManager->m_captionInactiveBackColor);
00154    m_pParent->m_pUnixIcon->setBackgroundColor(bActive
00155    ? m_pParent->m_pManager->m_captionActiveBackColor
00156    : m_pParent->m_pManager->m_captionInactiveBackColor);
00157 
00158    m_bActive = bActive;
00159    repaint( false);
00160 }
00161 
00162 
00163 
00164 void KMdiChildFrmCaption::setCaption(const QString& text)
00165 {
00166    m_szCaption = text;
00167    repaint(false);
00168 }
00169 
00170 
00171 
00172 int KMdiChildFrmCaption::heightHint()
00173 {
00174    int hght=m_pParent->m_pManager->m_captionFontLineSpacing+3;
00175    if (KMdiMainFrm::frameDecorOfAttachedViews() == KMdi::Win95Look) {
00176       if(hght<18)hght=18;
00177    }
00178    else if (KMdiMainFrm::frameDecorOfAttachedViews() == KMdi::KDE1Look) {
00179       if(hght<20)hght=20;
00180    }
00181    else if (KMdiMainFrm::frameDecorOfAttachedViews() == KMdi::KDELook) {
00182       if(hght<16)hght=16;
00183    }
00184    else {   
00185       hght -= 4;
00186       if(hght<14)hght=14;
00187    }
00188    return hght;
00189 }
00190 
00191 
00192 
00193 void KMdiChildFrmCaption::paintEvent(QPaintEvent *)
00194 {
00195    QPainter p(this);
00196    QRect r=rect();
00197    p.setFont(m_pParent->m_pManager->m_captionFont);
00198    if(m_bActive){
00199       p.fillRect(r,m_pParent->m_pManager->m_captionActiveBackColor);
00200       p.setPen(m_pParent->m_pManager->m_captionActiveForeColor);
00201    } else {
00202       p.fillRect(r,m_pParent->m_pManager->m_captionInactiveBackColor);
00203       p.setPen(m_pParent->m_pManager->m_captionInactiveForeColor);
00204    }
00205    
00206    if (KMdiMainFrm::frameDecorOfAttachedViews() == KMdi::Win95Look)
00207       r.setLeft(r.left()+m_pParent->icon()->width()+3);
00208    else if (KMdiMainFrm::frameDecorOfAttachedViews() == KMdi::KDE1Look)
00209       r.setLeft(r.left()+22);
00210    else if (KMdiMainFrm::frameDecorOfAttachedViews() == KMdi::KDELook)
00211       r.setLeft(r.left()+m_pParent->icon()->width()+3);
00212    else  
00213       r.setLeft(r.left()+30);
00214 
00215    int captionWidthForText = width() - 4*m_pParent->m_pClose->width() - m_pParent->icon()->width() - 5;
00216    QString text = abbreviateText( m_szCaption, captionWidthForText);
00217    p.drawText( r, AlignVCenter|AlignLeft|SingleLine, text);
00218 
00219 }
00220 
00221 
00222 
00223 QString KMdiChildFrmCaption::abbreviateText(QString origStr, int maxWidth)
00224 {
00225    QFontMetrics fm = fontMetrics();
00226    int actualWidth = fm.width( origStr);
00227 
00228    int realLetterCount = origStr.length();
00229    int newLetterCount;
00230    if (actualWidth != 0) {
00231       newLetterCount = (maxWidth * realLetterCount) / actualWidth;
00232    }
00233    else {
00234       newLetterCount = realLetterCount; 
00235    }
00236    int w = maxWidth+1;
00237    QString s = origStr;
00238    if (newLetterCount <= 0) {
00239       s = "";
00240    }
00241    while((w > maxWidth) && (newLetterCount >= 1)) {
00242       if( newLetterCount < realLetterCount) {
00243          if(newLetterCount > 3)
00244             s = origStr.left( newLetterCount/2) + "..." + origStr.right( newLetterCount/2);
00245          else {
00246             if(newLetterCount > 1)
00247                s = origStr.left( newLetterCount) + "..";
00248             else
00249                s = origStr.left(1);
00250          }
00251       }
00252       QFontMetrics fm = fontMetrics();
00253       w = fm.width(s);
00254       newLetterCount--;
00255    }
00256    return s;
00257 }
00258 
00259 
00260 
00261 void KMdiChildFrmCaption::mouseDoubleClickEvent(QMouseEvent *)
00262 {
00263    m_pParent->maximizePressed();
00264 }
00265 
00266 
00267 
00268 void KMdiChildFrmCaption::slot_moveViaSystemMenu()
00269 {
00270    setMouseTracking(true);
00271    grabMouse();
00272    if (KMdiMainFrm::frameDecorOfAttachedViews() != KMdi::Win95Look)
00273       QApplication::setOverrideCursor(Qt::sizeAllCursor,true);
00274    m_pParent->m_bDragging = true;
00275    m_offset = mapFromGlobal( QCursor::pos());
00276 }
00277 
00278 
 
This file is part of the documentation for kmdi Library Version 3.2.0.