1 /***************************************************************************
2 * Copyright (C) 2011 by Lasath Fernando <kde@lasath.org> *
3 * Copyright (C) 2011 by David Edmundson <kde@davidedmundson.co.uk> *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
19 ***************************************************************************/
20
21 #include "behavior-config.h"
22 #include <QButtonGroup>
23 #include "ui_behavior-config.h"
24
25 #include <KPluginFactory>
26 #include <KLocalizedString>
27
28 #include "shareprovider.h"
29
K_PLUGIN_FACTORY(KCMTelepathyChatBehaviorConfigFactory,registerPlugin<BehaviorConfig> ();)30 K_PLUGIN_FACTORY(KCMTelepathyChatBehaviorConfigFactory, registerPlugin<BehaviorConfig>();)
31
32 BehaviorConfig::BehaviorConfig(QWidget *parent, const QVariantList& args)
33 : KCModule(parent, args),
34 ui(new Ui::BehaviorConfigUi())
35 {
36 load();
37
38 ui->setupUi(this);
39
40 QButtonGroup *newTabGroup = new QButtonGroup(this);
41 newTabGroup->addButton(ui->radioNew);
42 newTabGroup->addButton(ui->radioZero);
43
44 newTabGroup->setId(ui->radioNew, TextChatConfig::NewWindow);
45 newTabGroup->setId(ui->radioZero, TextChatConfig::FirstWindow);
46
47 newTabGroup->button(m_openMode)->setChecked(true);
48 connect(newTabGroup, SIGNAL(buttonClicked(int)), this, SLOT(onRadioSelected(int)));
49
50 ui->scrollbackLength->setSuffix(ki18ncp("Part of config 'show last [spin box] messages' This is the suffix to the spin box. Be sure to include leading space"," message", " messages"));
51 ui->scrollbackLength->setValue(m_scrollbackLength);
52 connect(ui->scrollbackLength, SIGNAL(valueChanged(int)), this, SLOT(onScrollbackLengthChanged()));
53
54 ui->checkBoxShowMeTyping->setChecked(m_showMeTyping);
55 connect(ui->checkBoxShowMeTyping, SIGNAL(toggled(bool)), this, SLOT(onShowMeTypingChanged(bool)));
56
57 ui->checkBoxShowOthersTyping->setChecked(m_showOthersTyping);
58 connect(ui->checkBoxShowOthersTyping, SIGNAL(toggled(bool)), this, SLOT(onShowOthersTypingChanged(bool)));
59
60 ui->dontLeaveGroupChats->setChecked(m_dontLeaveGroupChats);
61 connect(ui->dontLeaveGroupChats, SIGNAL(toggled(bool)), this, SLOT(onDontLeaveGroupChatsChanged(bool)));
62
63 ui->rememberTabKeyboardLayout->setChecked(m_rememberTabKeyboardLayout);
64 connect(ui->rememberTabKeyboardLayout, SIGNAL(toggled(bool)), this, SLOT(onRememberTabKeyboardLayoutChanged(bool)));
65
66 QStringList nicknameCompletionStyles;
67 const QString namePlaceholder = ki18nc("Placeholder for contact name in completion suffix selector", "Nickname").toString();
68 Q_FOREACH(const QString &suffix, BehaviorConfig::nicknameCompletionSuffixes) {
69 nicknameCompletionStyles.append(namePlaceholder + suffix);
70 }
71 ui->nicknameCompletionStyle->addItems(nicknameCompletionStyles);
72 ui->nicknameCompletionStyle->setCurrentIndex(BehaviorConfig::nicknameCompletionSuffixes.indexOf(m_nicknameCompletionSuffix));
73 connect(ui->nicknameCompletionStyle, SIGNAL(currentIndexChanged(int)), this, SLOT(onNicknameCompletionStyleChanged(int)));
74
75 QMap<QString, ShareProvider::ShareService> availableShareServices = ShareProvider::availableShareServices();
76 QStringList sharingServicesList = availableShareServices.keys();
77 ui->imageSharingService->addItems(sharingServicesList);
78 QString shareServiceName = availableShareServices.key(static_cast<ShareProvider::ShareService>(m_imageShareServiceType));
79 ui->imageSharingService->setCurrentIndex(sharingServicesList.indexOf(shareServiceName));
80 connect(ui->imageSharingService, SIGNAL(currentIndexChanged(int)), this, SLOT(onImageSharingServiceChanged(int)));
81 }
82
83 const QStringList BehaviorConfig::nicknameCompletionSuffixes = QStringList()
84 << QLatin1String(", ")
85 << QLatin1String(": ")
86 << QLatin1String(" ");
87
~BehaviorConfig()88 BehaviorConfig::~BehaviorConfig()
89 {
90 delete ui;
91 }
92
load()93 void BehaviorConfig::load()
94 {
95 m_openMode = TextChatConfig::instance()->openMode();
96 m_scrollbackLength = TextChatConfig::instance()->scrollbackLength();
97 m_showMeTyping = TextChatConfig::instance()->showMeTyping();
98 m_showOthersTyping = TextChatConfig::instance()->showOthersTyping();
99 m_nicknameCompletionSuffix = TextChatConfig::instance()->nicknameCompletionSuffix();
100 m_imageShareServiceType = TextChatConfig::instance()->imageShareServiceType();
101 m_dontLeaveGroupChats = TextChatConfig::instance()->dontLeaveGroupChats();
102 m_rememberTabKeyboardLayout = TextChatConfig::instance()->rememberTabKeyboardLayout();
103 }
104
save()105 void BehaviorConfig::save()
106 {
107 TextChatConfig::instance()->setOpenMode(m_openMode);
108 TextChatConfig::instance()->setScrollbackLength(m_scrollbackLength);
109 TextChatConfig::instance()->setShowMeTyping(m_showMeTyping);
110 TextChatConfig::instance()->setShowOthersTyping(m_showOthersTyping);
111 TextChatConfig::instance()->setNicknameCompletionSuffix(m_nicknameCompletionSuffix);
112 TextChatConfig::instance()->setImageShareServiceName(m_imageShareServiceType);
113 TextChatConfig::instance()->setDontLeaveGroupChats(m_dontLeaveGroupChats);
114 TextChatConfig::instance()->setRememberTabKeyboardLayout(m_rememberTabKeyboardLayout);
115 TextChatConfig::instance()->sync();
116 }
117
changeEvent(QEvent * e)118 void BehaviorConfig::changeEvent(QEvent* e)
119 {
120 QWidget::changeEvent(e);
121 switch (e->type()) {
122 case QEvent::LanguageChange:
123 ui->retranslateUi(this);
124 break;
125 default:
126 break;
127 }
128 }
129
onRadioSelected(int id)130 void BehaviorConfig::onRadioSelected(int id)
131 {
132 m_openMode = (TextChatConfig::TabOpenMode) id;
133 Q_EMIT changed(true);
134 }
135
onScrollbackLengthChanged()136 void BehaviorConfig::onScrollbackLengthChanged()
137 {
138 m_scrollbackLength = ui->scrollbackLength->value();
139 Q_EMIT changed(true);
140 }
141
onShowMeTypingChanged(bool state)142 void BehaviorConfig::onShowMeTypingChanged(bool state)
143 {
144 m_showMeTyping = state;
145 Q_EMIT changed(true);
146 }
147
onShowOthersTypingChanged(bool state)148 void BehaviorConfig::onShowOthersTypingChanged(bool state)
149 {
150 m_showOthersTyping = state;
151 Q_EMIT changed(true);
152 }
153
154
onNicknameCompletionStyleChanged(int index)155 void BehaviorConfig::onNicknameCompletionStyleChanged(int index)
156 {
157 m_nicknameCompletionSuffix = BehaviorConfig::nicknameCompletionSuffixes[index];
158 Q_EMIT changed(true);
159 }
160
onImageSharingServiceChanged(int index)161 void BehaviorConfig::onImageSharingServiceChanged(int index)
162 {
163 Q_UNUSED(index);
164 QString imageShareServiceName = ui->imageSharingService->currentText();
165 m_imageShareServiceType = ShareProvider::availableShareServices()[imageShareServiceName];
166 Q_EMIT changed(true);
167 }
168
onDontLeaveGroupChatsChanged(bool state)169 void BehaviorConfig::onDontLeaveGroupChatsChanged(bool state)
170 {
171 m_dontLeaveGroupChats = state;
172 Q_EMIT changed(true);
173 }
174
onRememberTabKeyboardLayoutChanged(bool state)175 void BehaviorConfig::onRememberTabKeyboardLayoutChanged(bool state)
176 {
177 m_rememberTabKeyboardLayout = state;
178 Q_EMIT changed(true);
179 }
180
181 #include "behavior-config.moc"
182