summaryrefslogtreecommitdiffstats
path: root/libk3b/tools/k3bcutcombobox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libk3b/tools/k3bcutcombobox.cpp')
-rw-r--r--libk3b/tools/k3bcutcombobox.cpp230
1 files changed, 230 insertions, 0 deletions
diff --git a/libk3b/tools/k3bcutcombobox.cpp b/libk3b/tools/k3bcutcombobox.cpp
new file mode 100644
index 0000000..d4f516b
--- /dev/null
+++ b/libk3b/tools/k3bcutcombobox.cpp
@@ -0,0 +1,230 @@
+/*
+ *
+ * $Id: k3bcutcombobox.cpp 619556 2007-01-03 17:38:12Z trueg $
+ * Copyright (C) 2003 Sebastian Trueg <[email protected]>
+ *
+ * This file is part of the K3b project.
+ * Copyright (C) 1998-2007 Sebastian Trueg <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * See the file "COPYING" for the exact licensing terms.
+ */
+
+#include "k3bcutcombobox.h"
+
+#include <k3bstringutils.h>
+
+#include <qfontmetrics.h>
+#include <qevent.h>
+#include <qstringlist.h>
+#include <qrect.h>
+#include <qsize.h>
+#include <qpixmap.h>
+#include <qstyle.h>
+#include <qsizepolicy.h>
+
+
+class K3bCutComboBox::Private
+{
+public:
+ Private() {
+ method = CUT;
+ }
+
+ QStringList originalItems;
+
+ int method;
+ int width;
+};
+
+
+K3bCutComboBox::K3bCutComboBox( QWidget* parent, const char* name )
+ : KComboBox( parent, name )
+{
+ d = new Private();
+ // setSizePolicy( QSizePolicy::Maximum, sizePolicy().horData(), sizePolicy().hasHeightForWidth() );
+}
+
+
+K3bCutComboBox::K3bCutComboBox( int method, QWidget* parent, const char* name )
+ : KComboBox( parent, name )
+{
+ d = new Private();
+ d->method = method;
+}
+
+
+K3bCutComboBox::~K3bCutComboBox()
+{
+ delete d;
+}
+
+
+void K3bCutComboBox::setMethod( int m )
+{
+ d->method = m;
+ cutText();
+}
+
+
+QSize K3bCutComboBox::sizeHint() const
+{
+// QSize s(KComboBox::sizeHint());
+
+// for( int i = 0; i < count(); i++ ) {
+// int w = fontMetrics().width(d->originalItems[i]) +
+// ( d->pixmaps[i].isNull() ? 0 : d->pixmaps[i].width() + 4);
+// if( w > s.width() )
+// s.setWidth( w );
+// }
+
+ return KComboBox::sizeHint();
+}
+
+QSize K3bCutComboBox::minimumSizeHint() const
+{
+ return KComboBox::minimumSizeHint();
+}
+
+
+void K3bCutComboBox::setCurrentText( const QString& s )
+{
+ int i;
+ for( i = 0; i < count(); i++ )
+ if ( d->originalItems[i] == s )
+ break;
+ if ( i < count() ) {
+ setCurrentItem(i);
+ }
+ else if( !d->originalItems.isEmpty() ) {
+ d->originalItems[currentItem()] = s;
+ cutText();
+ }
+}
+
+
+void K3bCutComboBox::insertStringList( const QStringList&, int )
+{
+ // FIXME
+}
+
+
+void K3bCutComboBox::insertStrList( const QStrList&, int )
+{
+ // FIXME
+}
+
+void K3bCutComboBox::insertStrList( const QStrList*, int )
+{
+ // FIXME
+}
+
+void K3bCutComboBox::insertStrList( const char**, int, int)
+{
+ // FIXME
+}
+
+void K3bCutComboBox::insertItem( const QString& text, int index )
+{
+ insertItem( QPixmap(), text, index );
+}
+
+void K3bCutComboBox::insertItem( const QPixmap& pix, int i )
+{
+ insertItem( pix, "", i );
+}
+
+void K3bCutComboBox::insertItem( const QPixmap& pixmap, const QString& text, int index )
+{
+ if( index != -1 )
+ d->originalItems.insert( d->originalItems.at(index), text );
+ else
+ d->originalItems.append( text );
+
+ if( !pixmap.isNull() )
+ KComboBox::insertItem( pixmap, "xx", index );
+ else
+ KComboBox::insertItem( "xx", index );
+
+ cutText();
+}
+
+void K3bCutComboBox::removeItem( int i )
+{
+ d->originalItems.erase( d->originalItems.at(i) );
+ KComboBox::removeItem( i );
+}
+
+void K3bCutComboBox::changeItem( const QString& s, int i )
+{
+ d->originalItems[i] = s;
+ cutText();
+}
+
+void K3bCutComboBox::changeItem( const QPixmap& pix, const QString& s, int i )
+{
+ KComboBox::changeItem( pix, i );
+ changeItem( s, i );
+}
+
+
+QString K3bCutComboBox::text( int i ) const
+{
+ if( i < (int)d->originalItems.count() )
+ return d->originalItems[i];
+ else
+ return QString::null;
+}
+
+
+QString K3bCutComboBox::currentText() const
+{
+ if( currentItem() < (int)d->originalItems.count() )
+ return d->originalItems[currentItem()];
+ else
+ return QString::null;
+}
+
+
+void K3bCutComboBox::clear()
+{
+ KComboBox::clear();
+ d->originalItems.clear();
+}
+
+void K3bCutComboBox::resizeEvent( QResizeEvent* e )
+{
+ cutText();
+
+ KComboBox::resizeEvent(e);
+}
+
+
+void K3bCutComboBox::cutText()
+{
+ d->width = QStyle::visualRect( style().querySubControlMetrics(QStyle::CC_ComboBox, this,
+ QStyle::SC_ComboBoxEditField), this ).width();
+
+ for( int i = 0; i < (int)d->originalItems.count(); ++i ) {
+ int w = d->width;
+ if ( pixmap(i) && !pixmap(i)->isNull() )
+ w -= ( pixmap(i)->width() + 4 );
+
+ QString text;
+ if( d->method == SQUEEZE )
+ text = K3b::squeezeTextToWidth( fontMetrics(), d->originalItems[i], w );
+ else
+ text = K3b::cutToWidth( fontMetrics(), d->originalItems[i], w );
+
+ // now insert the cut text
+ if( pixmap(i) )
+ KComboBox::changeItem( *pixmap(i), text, i );
+ else
+ KComboBox::changeItem( text, i );
+ }
+}
+
+#include "k3bcutcombobox.moc"