kguiitem.cpp
00001 /* This file is part of the KDE libraries 00002 Copyright (C) 2001 Holger Freyther (freyher@yahoo.com) 00003 based on ideas from Martijn and Simon 00004 many thanks to Simon 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License version 2 as published by the Free Software Foundation. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public License 00016 along with this library; see the file COPYING.LIB. If not, write to 00017 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00018 Boston, MA 02110-1301, USA. 00019 */ 00020 00021 #include <qregexp.h> 00022 #include <qstring.h> 00023 #include <qiconset.h> 00024 #include <qpixmap.h> 00025 00026 #include <assert.h> 00027 #include <kiconloader.h> 00028 #include <kdebug.h> 00029 00030 #include "kguiitem.h" 00031 00032 class KGuiItem::KGuiItemPrivate 00033 { 00034 public: 00035 KGuiItemPrivate() 00036 { 00037 m_enabled = true; 00038 m_hasIcon = false; 00039 } 00040 00041 KGuiItemPrivate( const KGuiItemPrivate &rhs ) 00042 { 00043 ( *this ) = rhs; 00044 } 00045 00046 KGuiItemPrivate &operator=( const KGuiItemPrivate &rhs ) 00047 { 00048 m_text = rhs.m_text; 00049 m_iconSet = rhs.m_iconSet; 00050 m_iconName = rhs.m_iconName; 00051 m_toolTip = rhs.m_toolTip; 00052 m_whatsThis = rhs.m_whatsThis; 00053 m_statusText = rhs.m_statusText; 00054 m_enabled = rhs.m_enabled; 00055 m_hasIcon = rhs.m_hasIcon; 00056 00057 return *this; 00058 } 00059 00060 QString m_text; 00061 QString m_toolTip; 00062 QString m_whatsThis; 00063 QString m_statusText; 00064 QString m_iconName; 00065 QIconSet m_iconSet; 00066 bool m_hasIcon : 1; 00067 bool m_enabled : 1; 00068 }; 00069 00070 00071 KGuiItem::KGuiItem() { 00072 d = new KGuiItemPrivate; 00073 } 00074 00075 KGuiItem::KGuiItem( const QString &text, const QString &iconName, 00076 const QString &toolTip, const QString &whatsThis ) 00077 { 00078 d = new KGuiItemPrivate; 00079 d->m_text = text; 00080 d->m_toolTip = toolTip; 00081 d->m_whatsThis = whatsThis; 00082 setIconName( iconName ); 00083 } 00084 00085 KGuiItem::KGuiItem( const QString &text, const QIconSet &iconSet, 00086 const QString &toolTip, const QString &whatsThis ) 00087 { 00088 d = new KGuiItemPrivate; 00089 d->m_text = text; 00090 d->m_toolTip = toolTip; 00091 d->m_whatsThis = whatsThis; 00092 setIconSet( iconSet ); 00093 } 00094 00095 KGuiItem::KGuiItem( const KGuiItem &rhs ) 00096 : d( 0 ) 00097 { 00098 ( *this ) = rhs; 00099 } 00100 00101 KGuiItem &KGuiItem::operator=( const KGuiItem &rhs ) 00102 { 00103 if ( d == rhs.d ) 00104 return *this; 00105 00106 assert( rhs.d ); 00107 00108 delete d; 00109 d = new KGuiItemPrivate( *rhs.d ); 00110 00111 return *this; 00112 } 00113 00114 KGuiItem::~KGuiItem() 00115 { 00116 delete d; 00117 } 00118 00119 QString KGuiItem::text() const 00120 { 00121 return d->m_text; 00122 } 00123 00124 00125 QString KGuiItem::plainText() const 00126 { 00127 const int len = d->m_text.length(); 00128 00129 if (len == 0) 00130 return d->m_text; 00131 00132 //Can assume len >= 1 from now on. 00133 QString stripped; 00134 00135 int resultLength = 0; 00136 stripped.setLength(len); 00137 00138 const QChar* data = d->m_text.unicode(); 00139 for ( int pos = 0; pos < len; ++pos ) 00140 { 00141 if ( data[ pos ] != '&' ) 00142 stripped[ resultLength++ ] = data[ pos ]; 00143 else if ( pos + 1 < len && data[ pos + 1 ] == '&' ) 00144 stripped[ resultLength++ ] = data[ pos++ ]; 00145 } 00146 00147 stripped.truncate(resultLength); 00148 00149 return stripped; 00150 } 00151 00152 QIconSet KGuiItem::iconSet( KIcon::Group group, int size, KInstance* instance ) const 00153 { 00154 if( d->m_hasIcon ) 00155 { 00156 if( !d->m_iconName.isEmpty()) 00157 { 00158 // some caching here would(?) come handy 00159 return instance->iconLoader()->loadIconSet( d->m_iconName, group, size, true, false ); 00160 } 00161 else 00162 { 00163 return d->m_iconSet; 00164 } 00165 } 00166 else 00167 return QIconSet(); 00168 } 00169 00170 QString KGuiItem::iconName() const 00171 { 00172 return d->m_iconName; 00173 } 00174 00175 QString KGuiItem::toolTip() const 00176 { 00177 return d->m_toolTip; 00178 } 00179 00180 QString KGuiItem::whatsThis() const 00181 { 00182 return d->m_whatsThis; 00183 } 00184 00185 bool KGuiItem::isEnabled() const 00186 { 00187 return d->m_enabled; 00188 } 00189 00190 bool KGuiItem::hasIcon() const 00191 { 00192 return d->m_hasIcon; 00193 } 00194 00195 void KGuiItem::setText( const QString &text ) { 00196 d->m_text=text; 00197 } 00198 00199 void KGuiItem::setIconSet( const QIconSet &iconset ) 00200 { 00201 d->m_iconSet = iconset; 00202 d->m_iconName = QString::null; 00203 d->m_hasIcon = !iconset.isNull(); 00204 } 00205 00206 void KGuiItem::setIconName( const QString &iconName ) 00207 { 00208 d->m_iconName = iconName; 00209 d->m_iconSet = QIconSet(); 00210 d->m_hasIcon = !iconName.isEmpty(); 00211 } 00212 00213 void KGuiItem::setToolTip( const QString &toolTip ) 00214 { 00215 d->m_toolTip = toolTip; 00216 } 00217 00218 void KGuiItem::setWhatsThis( const QString &whatsThis ) 00219 { 00220 d->m_whatsThis = whatsThis; 00221 } 00222 00223 void KGuiItem::setEnabled( bool enabled ) 00224 { 00225 d->m_enabled = enabled; 00226 } 00227 00228 // vim: set et sw=4: 00229