~ubuntu-branches/ubuntu/jaunty/psi/jaunty

« back to all changes in this revision

Viewing changes to src/options/opt_plugins.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jan Niehusmann
  • Date: 2008-04-14 18:57:30 UTC
  • mfrom: (2.1.9 hardy)
  • Revision ID: james.westby@ubuntu.com-20080414185730-528re3zp0m2hdlhi
Tags: 0.11-8
* added CONFIG -= link_prl to .pro files and removed dependencies
  which are made unnecessary by this change
* Fix segfault when closing last chat tab with qt4.4
  (This is from upstream svn, rev. 1101) (Closes: Bug#476122)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "opt_plugins.h"
 
2
#include "common.h"
 
3
#include "iconwidget.h"
 
4
#include "pluginmanager.h"
 
5
#include "psioptions.h"
 
6
 
 
7
#include <qwhatsthis.h>
 
8
#include <qcheckbox.h>
 
9
#include <qcombobox.h>
 
10
#include <qbuttongroup.h>
 
11
#include <qradiobutton.h>
 
12
 
 
13
#include "ui_opt_plugins.h"
 
14
 
 
15
class OptPluginsUI : public QWidget, public Ui::OptPlugins
 
16
{
 
17
public:
 
18
        OptPluginsUI() : QWidget() { setupUi(this); }
 
19
};
 
20
 
 
21
//----------------------------------------------------------------------------
 
22
// OptionsTabPlugins
 
23
//----------------------------------------------------------------------------
 
24
 
 
25
OptionsTabPlugins::OptionsTabPlugins(QObject *parent)
 
26
: OptionsTab(parent, "plugins", "", tr("Plugins"), tr("Options for Psi plugins"), "psi/advanced")
 
27
{
 
28
        w = 0;
 
29
}
 
30
 
 
31
OptionsTabPlugins::~OptionsTabPlugins()
 
32
{
 
33
}
 
34
 
 
35
QWidget *OptionsTabPlugins::widget()
 
36
{
 
37
        if ( w )
 
38
                return 0;
 
39
 
 
40
        w = new OptPluginsUI();
 
41
        OptPluginsUI *d = (OptPluginsUI *)w;
 
42
 
 
43
        listPlugins();
 
44
 
 
45
        
 
46
        /*QWhatsThis::add(d->ck_messageevents,
 
47
                tr("Enables the sending and requesting of message events such as "
 
48
                "'Contact is Typing', ..."));*/
 
49
 
 
50
        connect(d->cb_plugins,SIGNAL(currentIndexChanged(int)),SLOT(pluginSelected(int)));
 
51
        connect(d->cb_loadPlugin,SIGNAL(stateChanged(int)),SLOT(loadToggled(int)));
 
52
        
 
53
        return w;
 
54
}
 
55
 
 
56
void OptionsTabPlugins::applyOptions(Options *opt)
 
57
{
 
58
        if ( !w )
 
59
                return;
 
60
 
 
61
        OptPluginsUI *d = (OptPluginsUI *)w;
 
62
        Q_UNUSED(d);
 
63
        Q_UNUSED(opt);
 
64
}
 
65
 
 
66
void OptionsTabPlugins::restoreOptions(const Options *opt)
 
67
{
 
68
        if ( !w )
 
69
                return;
 
70
 
 
71
        OptPluginsUI *d = (OptPluginsUI *)w;
 
72
        Q_UNUSED(opt);
 
73
        Q_UNUSED(d);
 
74
}
 
75
 
 
76
void OptionsTabPlugins::listPlugins()
 
77
{
 
78
        if ( !w )
 
79
                return;
 
80
 
 
81
        OptPluginsUI *d = (OptPluginsUI *)w;
 
82
 
 
83
        d->cb_plugins->clear();
 
84
        
 
85
        PluginManager *pm=PluginManager::instance();
 
86
        
 
87
        QStringList plugins=pm->availablePlugins();
 
88
                foreach (QString plugin, plugins){
 
89
                d->cb_plugins->addItem(plugin);
 
90
        }
 
91
        pluginSelected(0);
 
92
}
 
93
 
 
94
void OptionsTabPlugins::loadToggled(int state)
 
95
{
 
96
        Q_UNUSED(state);
 
97
        if ( !w )
 
98
                return;
 
99
        
 
100
        OptPluginsUI *d = (OptPluginsUI *)w;
 
101
        
 
102
        QString option=QString("%1.%2")
 
103
                .arg(PluginManager::loadOptionPrefix)
 
104
                .arg(PluginManager::instance()->shortName(d->cb_plugins->currentText()));
 
105
        bool value=d->cb_loadPlugin->isChecked(); 
 
106
        PsiOptions::instance()->setOption(option, value);
 
107
}
 
108
 
 
109
void OptionsTabPlugins::pluginSelected(int index)
 
110
{
 
111
        Q_UNUSED(index);
 
112
        if ( !w )
 
113
                return;
 
114
        
 
115
        OptPluginsUI *d = (OptPluginsUI *)w;
 
116
        d->le_location->setText(tr("No plugin selected."));
 
117
        d->cb_loadPlugin->setEnabled(false);
 
118
        delete d->pluginOptions;
 
119
        d->pluginOptions = new QLabel(tr("This plugin has no user configurable options"));
 
120
 
 
121
        if ( d->cb_plugins->count() > 0 ) {
 
122
                QString pluginName=d->cb_plugins->currentText();
 
123
                d->le_location->setText(PluginManager::instance()->pathToPlugin( pluginName ));
 
124
                d->cb_loadPlugin->setEnabled(true);
 
125
                QWidget* pluginOptions = PluginManager::instance()->getOptionsWidget( pluginName );
 
126
                d->cb_plugins->setEnabled(true);
 
127
        
 
128
                QString option=QString("%1.%2")
 
129
                        .arg(PluginManager::loadOptionPrefix)
 
130
                        .arg(PluginManager::instance()->shortName(pluginName));
 
131
                int value=PsiOptions::instance()->getOption(option).toBool();
 
132
                if (value)
 
133
                        value=Qt::Checked;
 
134
                else
 
135
                        value=Qt::Unchecked;
 
136
                d->cb_loadPlugin->setChecked(value);
 
137
        
 
138
                d->vboxLayout1->remove(d->pluginOptions);
 
139
                delete d->pluginOptions;
 
140
                d->pluginOptions=NULL;
 
141
                if (pluginOptions)
 
142
                {
 
143
                        d->pluginOptions = pluginOptions;
 
144
                        d->pluginOptions->setParent(d);
 
145
                        qWarning("Showing Plugin options");
 
146
                }
 
147
                else
 
148
                {
 
149
                        d->pluginOptions = new QLabel(tr("This plugin has no user configurable options"),d);
 
150
                        qWarning("Plugin has no options");
 
151
                }
 
152
                
 
153
                d->vboxLayout1->addWidget(d->pluginOptions);
 
154
                //d->pluginOptions->show();
 
155
                //d->updateGeometry();
 
156
        }
 
157
}