27
27
class LookFeelToolbarsUI : public QWidget, public Ui::LookFeelToolbars
30
LookFeelToolbarsUI() : QWidget() { setupUi(this); }
33
//----------------------------------------------------------------------------
34
// PositionOptionsTabToolbars
35
//----------------------------------------------------------------------------
37
class PositionOptionsTabToolbars : public QDialog, public Ui::PositionToolbarUI
41
PositionOptionsTabToolbars(QWidget *parent, Options::ToolbarPrefs *, int);
42
~PositionOptionsTabToolbars();
47
bool eventFilter(QObject *watched, QEvent *e);
58
Options::ToolbarPrefs *tb;
61
PositionOptionsTabToolbars::PositionOptionsTabToolbars(QWidget *parent, Options::ToolbarPrefs *_tb, int _id)
70
connect(pb_ok, SIGNAL(clicked()), SLOT(apply()));
71
connect(pb_ok, SIGNAL(clicked()), SLOT(accept()));
72
connect(pb_apply, SIGNAL(clicked()), SLOT(apply()));
73
connect(pb_cancel, SIGNAL(clicked()), SLOT(reject()));
75
connect(cb_dock, SIGNAL(highlighted(int)), SLOT(dataChanged()));
76
sb_index->installEventFilter( this );
77
sb_extraOffset->installEventFilter( this );
78
connect(ck_nl, SIGNAL(toggled(bool)), SLOT(dataChanged()));
80
le_name->setText( tb->name );
81
if ( tb->dock >= Qt::DockUnmanaged && tb->dock <= Qt::DockTornOff ) {
82
cb_dock->setCurrentItem( tb->dock + Qt::DockMinimized - Qt::DockTornOff );
85
cb_dock->setCurrentItem( tb->dock - Qt::DockTop );
87
sb_index->setValue( tb->index );
88
sb_extraOffset->setValue( tb->extraOffset );
89
ck_nl->setChecked( tb->nl );
92
pb_apply->setEnabled(false);
97
PositionOptionsTabToolbars::~PositionOptionsTabToolbars()
101
int PositionOptionsTabToolbars::n()
106
void PositionOptionsTabToolbars::dataChanged()
109
pb_apply->setEnabled(true);
112
void PositionOptionsTabToolbars::apply()
115
if ( cb_dock->currentItem() >= 0 && cb_dock->currentItem() < 5 ) {
116
// Top, Bottom, Left, Right and Minimised
117
tb->dock = (Qt::ToolBarDock)(cb_dock->currentItem() + Qt::DockTop);
120
// Unmanaged and TornOff
121
tb->dock = (Qt::ToolBarDock)(cb_dock->currentItem() - (Qt::DockMinimized - Qt::DockTornOff));
124
tb->index = sb_index->value();
125
tb->extraOffset = sb_extraOffset->value();
126
tb->nl = ck_nl->isChecked();
131
pb_apply->setEnabled(false);
134
bool PositionOptionsTabToolbars::eventFilter(QObject *watched, QEvent *e)
136
if ( watched->inherits("QSpinBox") && e->type() == QEvent::KeyRelease )
30
LookFeelToolbarsUI() : QWidget() {
141
35
//----------------------------------------------------------------------------
142
36
// OptionsTabToolbars
145
39
class OptionsTabToolbars::Private
155
ToolbarItem( QString _w, int _i ) {
161
QMap<int, ToolbarItem> toolbars;
163
PsiActionList::ActionsType class2id( QString name ) {
42
QMap<QString, ToolbarPrefs> toolbars;
44
PsiActionList::ActionsType class2id() {
164
45
int ret = (int)PsiActionList::Actions_Common;
166
if ( name == "mainWin" )
167
ret |= (int)PsiActionList::Actions_MainWin;
46
ret |= (int)PsiActionList::Actions_MainWin;
169
47
return (PsiActionList::ActionsType)ret;
173
OptionsTabToolbars::OptionsTabToolbars(QObject *parent)
174
: OptionsTab(parent, "toolbars", "", tr("Toolbars"), tr("Configure Psi toolbars"), "psi/toolbars")
51
OptionsTabToolbars::OptionsTabToolbars(QObject *parent)
52
: OptionsTab(parent, "toolbars", "", tr("Toolbars"), tr("Configure Psi toolbars"), "psi/toolbars")
177
55
p = new Private();
183
60
QWidget *OptionsTabToolbars::widget()
188
65
w = new LookFeelToolbarsUI();
189
66
LookFeelToolbarsUI *d = (LookFeelToolbarsUI*) w;
191
68
connect(d->pb_addToolbar, SIGNAL(clicked()), SLOT(toolbarAdd()));
192
69
connect(d->pb_deleteToolbar, SIGNAL(clicked()), SLOT(toolbarDelete()));
193
70
connect(d->cb_toolbars, SIGNAL(activated(int)), SLOT(toolbarSelectionChanged(int)));
194
71
connect(d->le_toolbarName, SIGNAL(textChanged(const QString &)), SLOT(toolbarNameChanged()));
195
connect(d->pb_toolbarPosition, SIGNAL(clicked()), SLOT(toolbarPosition()));
72
// connect(d->pb_toolbarPosition, SIGNAL(clicked()), SLOT(toolbarPosition()));
196
73
connect(d->tb_up, SIGNAL(clicked()), SLOT(toolbarActionUp()));
197
74
connect(d->tb_down, SIGNAL(clicked()), SLOT(toolbarActionDown()));
198
75
connect(d->tb_right, SIGNAL(clicked()), SLOT(toolbarAddAction()));
292
void OptionsTabToolbars::applyOptions(Options *o)
295
opt->toolbars = o->toolbars;
297
// get current toolbars' positions
298
QList<PsiToolBar*> toolbars = psi->toolbarList();
299
for (int i = 0; i < opt->toolbars["mainWin"].count() && i < toolbars.count(); i++) {
300
//if ( toolbarPositionInProgress && posTbDlg->n() == (int)i )
303
Options::ToolbarPrefs &tbPref = opt->toolbars["mainWin"][i];
304
psi->getToolbarLocation(toolbars.at(i), tbPref.dock, tbPref.index, tbPref.nl, tbPref.extraOffset);
308
o->toolbars = opt->toolbars;
313
void OptionsTabToolbars::rebuildToolbarList()
315
LookFeelToolbarsUI *d = (LookFeelToolbarsUI *)w;
317
d->cb_toolbars->clear();
320
QMap< QString, QList<Options::ToolbarPrefs> >::Iterator it = opt->toolbars.begin();
321
for ( ; it != opt->toolbars.end(); ++it ) {
322
if ( p->toolbars.count() )
323
d->cb_toolbars->insertItem( "---" ); // TODO: think of better separator
326
QList<Options::ToolbarPrefs>::Iterator it2 = it.data().begin();
327
for ( ; it2 != it.data().end(); ++it2, ++i ) {
328
d->cb_toolbars->insertItem( (*it2).name );
329
p->toolbars[d->cb_toolbars->count()-1] = Private::ToolbarItem( it.key(), i );
334
void OptionsTabToolbars::restoreOptions(const Options *o)
339
LookFeelToolbarsUI *d = (LookFeelToolbarsUI *)w;
340
opt->toolbars = o->toolbars;
341
opt->hideMenubar = o->hideMenubar;
343
rebuildToolbarList();
345
if(d->cb_toolbars->count() > 0) {
346
d->cb_toolbars->setCurrentIndex( 0 );
347
toolbarSelectionChanged( 0 );
168
void OptionsTabToolbars::applyOptions()
173
LookFeelToolbarsUI *d = (LookFeelToolbarsUI *)w;
175
PsiOptions *o = PsiOptions::instance();
176
o->removeOption("options.ui.contactlist.toolbars", true);
177
QMap<QString, ToolbarPrefs>::Iterator it = p->toolbars.begin();
178
for (; it != p->toolbars.end(); ++it) {
179
PsiToolBar::structToOptions(o, it.data());
183
void OptionsTabToolbars::restoreOptions()
188
LookFeelToolbarsUI *d = (LookFeelToolbarsUI *)w;
190
PsiOptions *o = PsiOptions::instance();
192
QStringList toolbarBases = o->getChildOptionNames("options.ui.contactlist.toolbars", true, true);
194
foreach(QString base, toolbarBases) {
196
tb.id = o->getOption(base + ".key").toString();
197
tb.name = o->getOption(base + ".name").toString();
198
tb.on = o->getOption(base + ".visible").toBool();
199
tb.locked = o->getOption(base + ".locked").toBool();
200
// tb.stretchable = o->getOption(base + ".stretchable").toBool();
201
tb.dock = (Qt::Dock)o->getOption(base + ".dock.position").toInt(); //FIXME
202
// tb.index = o->getOption(base + ".dock.index").toInt();
203
tb.nl = o->getOption(base + ".dock.nl").toBool();
204
// tb.extraOffset = o->getOption(base + ".dock.extra-offset").toInt();
205
tb.keys = o->getOption(base + ".actions").toStringList();
207
p->toolbars[base] = tb;
208
d->cb_toolbars->addItem(tb.name, base);
211
if (d->cb_toolbars->count() > 0) {
212
d->cb_toolbars->setCurrentIndex(0);
213
toolbarSelectionChanged(0);
350
toolbarSelectionChanged( -1 );
216
toolbarSelectionChanged(-1);
353
219
//----------------------------------------------------------------------------
386
274
LookFeelToolbarsUI *d = (LookFeelToolbarsUI *)w;
387
275
int n = d->cb_toolbars->currentIndex();
390
int idx = p->toolbars[n].index;
391
QList<Options::ToolbarPrefs>::Iterator it = opt->toolbars[p->toolbars[n].group].begin();
392
for (int i = 0; i < idx; i++)
396
opt->toolbars[p->toolbars[n].group].remove(it);
398
toolbarSelectionChanged(-1);
399
rebuildToolbarList();
401
toolbarSelectionChanged( d->cb_toolbars->currentIndex() );
277
QString base = d->cb_toolbars->itemData(n).toString();
280
toolbarSelectionChanged(-1);
282
p->toolbars.remove(base);
284
d->cb_toolbars->removeItem(d->cb_toolbars->findData(base));
287
toolbarSelectionChanged(d->cb_toolbars->currentIndex());
405
290
void OptionsTabToolbars::addToolbarAction(QListWidget *parent, QString name, int toolbarId)
407
ActionList actions = psi->actionList()->suitableActions( (PsiActionList::ActionsType)toolbarId );
408
const QAction *action = (QAction *)actions.action( name );
292
ActionList actions = psi->actionList()->suitableActions((PsiActionList::ActionsType)toolbarId);
293
const QAction *action = (QAction *)actions.action(name);
411
296
addToolbarAction(parent, action, name);
416
301
QListWidgetItem *item = new QListWidgetItem(parent);
418
303
QString n = actionName(action);
419
if ( !action->whatsThis().isEmpty() )
304
if (!action->whatsThis().isEmpty())
420
305
n += " - " + action->whatsThis();
421
306
item->setText(n);
422
307
item->setData(Qt::UserRole, name);
423
308
item->setIcon(action->iconSet());
309
item->setHidden(!action->isVisible());
426
312
void OptionsTabToolbars::toolbarSelectionChanged(int item)
432
PsiToolBar *toolBar = 0;
434
toolBar = psi->findToolBar( p->toolbars[n].group, p->toolbars[n].index );
318
// PsiToolBar *toolBar = 0;
320
// toolBar = psi->findToolBar( p->toolbars[n].group, p->toolbars[n].index );
436
bool customizeable = toolBar ? toolBar->isCustomizeable() : true;
437
bool moveable = toolBar ? toolBar->isMoveable() : true;
322
bool customizeable = true;
323
bool moveable = true;
439
325
LookFeelToolbarsUI *d = (LookFeelToolbarsUI *)w;
440
bool enable = (item == -1) ? false: true;
441
d->le_toolbarName->setEnabled( enable );
442
d->pb_toolbarPosition->setEnabled( enable && moveable );
443
d->ck_toolbarOn->setEnabled( enable );
444
d->ck_toolbarLocked->setEnabled( enable && moveable );
445
d->ck_toolbarStretch->setEnabled( enable && moveable );
446
d->lw_selectedActions->setEnabled( enable && customizeable );
447
d->tw_availActions->setEnabled( enable && customizeable );
448
d->tb_up->setEnabled( enable && customizeable );
449
d->tb_down->setEnabled( enable && customizeable );
450
d->tb_left->setEnabled( enable && customizeable );
451
d->tb_right->setEnabled( enable && customizeable );
452
d->pb_deleteToolbar->setEnabled( enable && p->toolbars[n].group == "mainWin" );
453
d->cb_toolbars->setEnabled( enable );
326
bool enable = (item == -1) ? false : true;
327
d->le_toolbarName->setEnabled(enable);
328
// d->pb_toolbarPosition->setEnabled(enable && moveable);
329
d->ck_toolbarOn->setEnabled(enable);
330
d->ck_toolbarLocked->setEnabled(enable && moveable);
331
// d->ck_toolbarStretch->setEnabled(enable && moveable);
332
d->lw_selectedActions->setEnabled(enable && customizeable);
333
d->tw_availActions->setEnabled(enable && customizeable);
334
d->tb_up->setEnabled(enable && customizeable);
335
d->tb_down->setEnabled(enable && customizeable);
336
d->tb_left->setEnabled(enable && customizeable);
337
d->tb_right->setEnabled(enable && customizeable);
338
d->pb_deleteToolbar->setEnabled(enable);
339
d->cb_toolbars->setEnabled(enable);
455
341
d->tw_availActions->clear();
456
342
d->lw_selectedActions->clear();
459
d->le_toolbarName->setText( "" );
345
d->le_toolbarName->setText("");
465
Options::ToolbarPrefs tb = opt->toolbars[p->toolbars[n].group][p->toolbars[n].index];
466
d->le_toolbarName->setText( tb.name );
467
d->ck_toolbarOn->setChecked( tb.on );
468
d->ck_toolbarLocked->setChecked( tb.locked || !moveable );
469
d->ck_toolbarStretch->setChecked( tb.stretchable );
351
QString base = d->cb_toolbars->itemData(n).toString();
353
tb = p->toolbars[base];
355
d->le_toolbarName->setText(tb.name);
356
d->ck_toolbarOn->setChecked(tb.on);
357
d->ck_toolbarLocked->setChecked(tb.locked || !moveable);
358
// d->ck_toolbarStretch->setChecked(tb.stretchable);
472
361
// Fill the TreeWidget with toolbar-specific actions
473
362
QTreeWidget *tw = d->tw_availActions;
474
363
QTreeWidgetItem *lastRoot = 0;
476
foreach(ActionList* actionList, psi->actionList()->actionLists( p->class2id( p->toolbars[n].group ) )) {
365
foreach(ActionList* actionList, psi->actionList()->actionLists(p->class2id())) {
477
366
QTreeWidgetItem *root = new QTreeWidgetItem(tw, lastRoot);
479
root->setText( 0, actionList->name() );
480
root->setData( 0, Qt::UserRole, QString("") );
481
root->setExpanded( true );
368
root->setText(0, actionList->name());
369
root->setData(0, Qt::UserRole, QString(""));
370
root->setExpanded(true);
483
372
QTreeWidgetItem *last = 0;
484
373
QStringList actionNames = actionList->actions();
485
374
QStringList::Iterator it2 = actionNames.begin();
486
for ( ; it2 != actionNames.end(); ++it2 ) {
487
IconAction *action = actionList->action( *it2 );
488
QTreeWidgetItem *item = new QTreeWidgetItem( root, last );
375
for (; it2 != actionNames.end(); ++it2) {
376
IconAction *action = actionList->action(*it2);
377
if (!action->isVisible())
379
QTreeWidgetItem *item = new QTreeWidgetItem(root, last);
491
382
QString n = actionName((QAction *)action);
492
if ( !action->whatsThis().isEmpty() )
383
if (!action->whatsThis().isEmpty()) {
493
384
n += " - " + action->whatsThis();
494
item->setText( 0, n );
495
item->setIcon( 0, action->iconSet() );
496
item->setData( 0, Qt::UserRole, action->name() );
387
item->setIcon(0, action->iconSet());
388
item->setData(0, Qt::UserRole, action->name());
499
391
tw->resizeColumnToContents(0);
502
394
QStringList::Iterator it = tb.keys.begin();
503
for ( ; it != tb.keys.end(); ++it) {
504
addToolbarAction(d->lw_selectedActions, *it, p->class2id( p->toolbars[n].group ) );
395
for (; it != tb.keys.end(); ++it) {
396
addToolbarAction(d->lw_selectedActions, *it, p->class2id());