00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
#include "tkaction.h"
00020
#include "tktoolbarbutton.h"
00021
#include "tkcombobox.h"
00022
00023
#include <qlabel.h>
00024
#include <qlayout.h>
00025
00026
#include <ktoolbar.h>
00027
#include <kiconloader.h>
00028
00029
#define SET_FOR_ALL_CONTAINER(WIDGET_TYPE,METHOD_NAME,VALUE) \
00030
for( int id = 0; id < containerCount(); ++id ) { \
00031
QWidget* w = container(id); \
00032
if ( w->inherits("KToolBar") ) { \
00033
QWidget* r = static_cast<KToolBar*>(w)->getWidget(itemId(id)); \
00034
if (qstrcmp(r->name(),"KTToolBarLayout")==0) \
00035
r = (QWidget*)r->child("widget"); \
00036
if ( r && r->inherits(#WIDGET_TYPE) ) { \
00037
WIDGET_TYPE* b = static_cast<WIDGET_TYPE*>(r); \
00038
b->METHOD_NAME(VALUE); \
00039
} \
00040
} \
00041
}
00042
00043 TKAction::TKAction(
QObject* parent,
const char* name)
00044 : KAction( "", 0, parent, name )
00045 {
00046 m_imode = TK::IconOnly;
00047 }
00048
00049 TKAction::~TKAction()
00050 {
00051 }
00052
00053
int TKAction::plug(
QWidget* widget,
int index)
00054 {
00055
if ( widget->inherits(
"KToolBar") ) {
00056 KToolBar* bar = static_cast<KToolBar*>(widget);
00057
int id_ = KAction::getToolButtonID();
00058 KInstance *instance;
00059
00060
if ( parentCollection() )
00061 instance = parentCollection()->instance();
00062
else
00063 instance = KGlobal::instance();
00064
00065 TKToolBarButton* b =
new TKToolBarButton(icon(),plainText(),bar,name(),instance);
00066
00067
00068 b->setIconMode(m_imode);
00069 initToolBarButton(b);
00070
00071 bar->insertWidget( id_, 100, b, index );
00072 addContainer(bar,id_);
00073 connect( bar, SIGNAL(destroyed()),
this, SLOT(slotDestroyed()) );
00074
00075
return containerCount() - 1;
00076 }
00077
return KAction::plug(widget,index);
00078 }
00079
00080
void TKAction::initToolBarButton(TKToolBarButton* button)
00081 {
00082 connect(button,SIGNAL(buttonClicked()),SLOT(slotActivated()));
00083 }
00084
00085 TK::IconMode TKAction::iconMode()
00086 {
00087
return m_imode;
00088 }
00089
00090
void TKAction::setIconMode(TK::IconMode mode)
00091 {
00092 m_imode = mode;
00093 SET_FOR_ALL_CONTAINER(TKToolBarButton,setIconMode,mode)
00094 }
00095
00096
void TKAction::setText(
const QString& text)
00097 {
00098 KAction::setText(text);
00099 updateLayout();
00100 }
00101
00102
void TKAction::setIcon(
const QString& icon)
00103 {
00104 KAction::setIcon(icon);
00105 updateLayout();
00106 }
00107
00108
void TKAction::updateLayout()
00109 {
00110
int len = containerCount();
00111
for(
int id = 0;
id < len; ++
id ) {
00112
QWidget* w = container(
id );
00113
if (w->inherits(
"KToolBar")) {
00114
QWidget* r = static_cast<KToolBar*>(w)->getWidget(itemId(
id));
00115
if (qstrcmp(r->name(),
"KTToolBarLayout")==0) {
00116 updateLayout(r);
00117 }
00118 }
00119 }
00120 }
00121
00122
QWidget* TKAction::createLayout(
QWidget* parent,
QWidget* children)
00123 {
00124
QWidget* base =
new QWidget(parent,
"KTToolBarLayout");
00125
QLabel* textLabel =
new QLabel(base,
"text");
00126 textLabel->setMinimumHeight(1);
00127 QLabel* pixLabel =
new QLabel(base,
"pixmap");
00128 children->reparent(base,
QPoint(0,0));
00129 children->setName(
"widget");
00130
QHBoxLayout* layout =
new QHBoxLayout(base,0,3);
00131 layout->setResizeMode(QLayout::Minimum);
00132 layout->addWidget(textLabel);
00133 layout->addWidget(pixLabel);
00134 layout->addWidget(children,1);
00135
00136 updateLayout(base);
00137
return base;
00138 }
00139
00140
void TKAction::updateLayout(QWidget* base)
00141 {
00142 QLabel* textLabel = (QLabel*)base->child(
"text");
00143 QLabel* pixLabel = (QLabel*)base->child(
"pixmap");
00144 QWidget* w = (QWidget*)base->child(
"widget");
00145
00146
if (!textLabel || !pixLabel || !w)
00147
return;
00148
00149
if (!text().isEmpty() && m_imode != TK::IconOnly ) {
00150 textLabel->setText(text());
00151 textLabel->show();
00152 }
else
00153 textLabel->hide();
00154
00155
QPixmap pix;
00156
if (hasIcon())
00157 pix = iconSet(KIcon::Small).pixmap();
00158
00159
if (!icon().isEmpty())
00160 pix = BarIcon(icon());
00161
00162
if (!pix.isNull() && m_imode != TK::TextOnly) {
00163 pixLabel->setPixmap(pix);
00164 pixLabel->show();
00165 }
else
00166 pixLabel->hide();
00167
00168 base->setFixedWidth( w->sizeHint().width() +
00169 (textLabel->isVisible() ? textLabel->sizeHint().width():0) +
00170 (pixLabel->isVisible() ? pixLabel->sizeHint().width():0) );
00171 }
00172
00173 TKBaseSelectAction::TKBaseSelectAction(
QObject* parent,
const char* name )
00174 : TKAction(parent,name)
00175 {
00176 m_current = 0;
00177 m_editable =
false;
00178 }
00179
00180 TKBaseSelectAction::~TKBaseSelectAction()
00181 {
00182 }
00183
00184
int TKBaseSelectAction::plug(QWidget* widget,
int index)
00185 {
00186
if ( widget->inherits(
"KToolBar") )
00187 {
00188 KToolBar* bar = static_cast<KToolBar*>( widget );
00189
int id_ = KAction::getToolButtonID();
00190
00191 TKComboBox* cb =
new TKComboBox(m_editable,bar);
00192 initComboBox(cb);
00193 cb->setMinimumWidth( cb->sizeHint().width() );
00194 QWidget* base = createLayout(bar,cb);
00195
00196 bar->insertWidget( id_, 100, base, index );
00197 addContainer( bar, id_ );
00198
00199 connect( bar, SIGNAL( destroyed() ),
this, SLOT( slotDestroyed() ) );
00200
00201 setCurrentItem(currentItem());
00202
00203
return containerCount() - 1;
00204 }
00205
return -1;
00206 }
00207
00208
int TKBaseSelectAction::currentItem()
00209 {
00210
return m_current;
00211 }
00212
00213
void TKBaseSelectAction::initComboBox(TKComboBox* cb)
00214 {
00215 connect(cb,SIGNAL(activated(
int)),SLOT(slotActivated(
int)));
00216 }
00217
00218
void TKBaseSelectAction::setEditable(
bool editable)
00219 {
00220 m_editable = editable;
00221 SET_FOR_ALL_CONTAINER(TKComboBox,setEditable,editable)
00222 }
00223
00224
bool TKBaseSelectAction::isEditable()
00225 {
00226
return m_editable;
00227 }
00228
00229
void TKBaseSelectAction::setCurrentItem(
int index)
00230 {
00231 m_current = index;
00232 SET_FOR_ALL_CONTAINER(TKComboBox,setCurrentItem,index)
00233 }
00234
00235
void TKBaseSelectAction::slotActivated(
int id)
00236 {
00237
if ( m_current ==
id )
00238
return;
00239
00240 m_current =
id;
00241 setCurrentItem(
id);
00242 activate(
id);
00243 }
00244
00245
void TKBaseSelectAction::activate(
int id)
00246 {
00247 emit activated(
id);
00248 }
00249
00250 TKSelectAction::TKSelectAction(
QObject* parent,
const char* name )
00251 : TKBaseSelectAction(parent,name)
00252 {
00253 }
00254
00255 TKSelectAction::~TKSelectAction()
00256 {
00257 }
00258
00259
void TKSelectAction::initComboBox(TKComboBox* cb)
00260 {
00261 TKBaseSelectAction::initComboBox(cb);
00262 connect(cb,SIGNAL(activated(
const QString&)),SLOT(slotActivated(
const QString&)));
00263 cb->insertStringList(items());
00264 }
00265
00266
void TKSelectAction::slotActivated(
const QString& text)
00267 {
00268 emit activated(text);
00269 }
00270
00271
void TKSelectAction::setItems(
const QStringList& lst )
00272 {
00273 m_list = lst;
00274 m_current = -1;
00275
00276 SET_FOR_ALL_CONTAINER(TKComboBox,clear, )
00277 SET_FOR_ALL_CONTAINER(TKComboBox,insertStringList,lst)
00278
00279
00280 setEnabled ( lst.count() > 0 || m_editable );
00281 }
00282
00283
QStringList TKSelectAction::items()
const
00284
{
00285
return m_list;
00286 }
00287
00288
void TKSelectAction::clear()
00289 {
00290 SET_FOR_ALL_CONTAINER(TKComboBox,clear, )
00291 }
00292
00293
void TKSelectAction::setEditText(
const QString& text)
00294 {
00295 SET_FOR_ALL_CONTAINER(TKComboBox,setEditText,text)
00296 }
00297
00298
#undef SET_FOR_ALL_CONTAINER
00299
#include "tkaction.moc"