summaryrefslogtreecommitdiffstats
path: root/src/app/Dialogs/krsqueezedtextlabel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/Dialogs/krsqueezedtextlabel.cpp')
-rw-r--r--src/app/Dialogs/krsqueezedtextlabel.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/app/Dialogs/krsqueezedtextlabel.cpp b/src/app/Dialogs/krsqueezedtextlabel.cpp
new file mode 100644
index 0000000..7a5ef8d
--- /dev/null
+++ b/src/app/Dialogs/krsqueezedtextlabel.cpp
@@ -0,0 +1,80 @@
+#include "krsqueezedtextlabel.h"
+#include <kstringhandler.h>
+#include <kurldrag.h>
+#include <tqtooltip.h>
+
+KrSqueezedTextLabel::KrSqueezedTextLabel(TQWidget *parent, const char *name):
+ KSqueezedTextLabel(parent, name), acceptDrops( false ), _index(-1), _length(-1) {
+}
+
+
+KrSqueezedTextLabel::~KrSqueezedTextLabel() {
+}
+
+void KrSqueezedTextLabel::mousePressEvent(TQMouseEvent *) {
+ emit clicked();
+
+}
+
+void KrSqueezedTextLabel::enableDrops( bool flag )
+{
+ setAcceptDrops( acceptDrops = flag );
+}
+
+void KrSqueezedTextLabel::dropEvent(TQDropEvent *e) {
+ emit dropped(e);
+}
+
+void KrSqueezedTextLabel::dragEnterEvent(TQDragEnterEvent *e) {
+ if( acceptDrops )
+ e->accept( KURLDrag::canDecode( e ) );
+ else
+ KSqueezedTextLabel::dragEnterEvent( e );
+}
+
+void KrSqueezedTextLabel::squeezeTextToLabel(int index, int length) {
+ if (index==-1 || length==-1)
+ KSqueezedTextLabel::squeezeTextToLabel();
+ else {
+ TQString sqtext=fullText;
+ TQFontMetrics fm(fontMetrics());
+ int labelWidth = size().width();
+ int textWidth = fm.width(sqtext);
+ if (textWidth > labelWidth) {
+ int avgCharSize = textWidth / sqtext.length();
+ int numOfExtraChars = (textWidth-labelWidth)/avgCharSize;
+ int delta;
+
+ // remove as much as possible from the left, and then from the right
+ if (index>3) {
+ delta=TQMIN(index, numOfExtraChars);
+ numOfExtraChars -= delta;
+ sqtext.replace(0, delta, "...");
+ }
+
+ if (numOfExtraChars>0 && ((int)sqtext.length() > length+3)) {
+ delta = TQMIN(numOfExtraChars, (int)sqtext.length() - (length+3));
+ sqtext.replace(sqtext.length()-delta, delta, "...");
+ }
+ TQLabel::setText(sqtext);
+
+ TQToolTip::remove( this );
+ TQToolTip::add( this, fullText );
+ } else {
+ TQLabel::setText(fullText);
+
+ TQToolTip::remove( this );
+ TQToolTip::hide();
+ }
+ }
+}
+
+void KrSqueezedTextLabel::setText( const TQString &text, int index, int length ) {
+ _index=index;
+ _length=length;
+ fullText = text;
+ squeezeTextToLabel(_index,_length);
+}
+
+#include "krsqueezedtextlabel.moc"
+