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