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