Now the systrayicon change it's color when a download is in progress. I simply change...
[kdenetwork.git] / ksirc / chanButtons.cpp
blobf40c71760d9be76159ccf3523f888ae426bd8e99
1 /* mode buttons for ksirc - Robbie Ward <linuxphreak@gmx.co.uk>*/
3 #include "chanButtons.h"
4 #include "chanButtons.moc"
6 #include <klocale.h>
7 #include <kpopupmenu.h>
8 #include <knuminput.h>
9 #include <kstdguiitem.h>
10 #include <kpushbutton.h>
12 #include <qlayout.h>
13 #include <qtooltip.h>
14 #include <qlineedit.h>
16 #include "ksircprocess.h"
18 static void makeSquare(QWidget *w)
20 QSize sh = w->sizeHint();
21 int s = sh.height();
22 w->setFixedSize(s,s);
25 chanButtons::chanButtons(KSircProcess *proc, QWidget *parent, const char *name)
26 : QWidget(parent, name),
27 m_proc(proc)
29 Popupmenu = new KPopupMenu( this );
30 Popupmenu->insertTitle(i18n("Channel Modes"));
31 toggleMenu[0] = Popupmenu->insertItem(i18n("i (invite-only)"), this, SLOT(invite()));
32 toggleMenu[1] = Popupmenu->insertItem(i18n("l (limited users)"), this, SLOT(limited()));
33 toggleMenu[2] = Popupmenu->insertItem(i18n("k (key to join)"), this, SLOT(key()));
34 toggleMenu[3] = Popupmenu->insertItem(i18n("s (secret)"), this, SLOT(secret()));
35 Popupmenu->insertSeparator();
36 Popupmenu->insertTitle(i18n("User Modes"));
37 toggleMenu[4] = Popupmenu->insertItem(i18n("i (be invisible)"), this, SLOT(invisible()));
38 toggleMenu[5] = Popupmenu->insertItem(i18n("w (receive wallops)"), this, SLOT(wallops()));
39 toggleMenu[6] = Popupmenu->insertItem(i18n("s (get server notices)"), this, SLOT(serverNotices()));
41 layout = new QHBoxLayout(this);
42 layout->setSpacing(0);
43 layout->setMargin(0);
45 protectButton = new QPushButton(i18n("T"), this);
46 protectButton->setToggleButton(true);
47 makeSquare(protectButton);
48 QToolTip::add(protectButton, i18n("Only op'ed users can change the topic"));
49 connect(protectButton, SIGNAL(clicked()), this, SLOT(protectMode()));
50 layout->addWidget(protectButton);
52 outsideButton = new QPushButton(i18n("N"), this);
53 outsideButton->setToggleButton(true);
54 makeSquare(outsideButton);
55 QToolTip::add(outsideButton, i18n("No outside messages"));
56 connect(outsideButton, SIGNAL(clicked()), this, SLOT(outsideMode()));
57 layout->addWidget(outsideButton);
59 moderateButton = new QPushButton(i18n("M"), this);
60 moderateButton->setToggleButton(true);
61 makeSquare(moderateButton);
62 QToolTip::add(moderateButton, i18n("Only op'ed users and voiced users (+v) can speak"));
63 connect(moderateButton, SIGNAL(clicked()), this, SLOT(moderateMode()));
64 layout->addWidget(moderateButton);
66 menuButton = new QPushButton(i18n("..."), this);
67 makeSquare(menuButton);
68 menuButton->setFixedWidth(menuButton->width()*2);
69 menuButton->setPopup(Popupmenu);
70 QToolTip::add(menuButton, i18n("More mode commands"));
71 layout->addWidget(menuButton);
74 void chanButtons::invite()
76 if (Popupmenu->isItemChecked(toggleMenu[0])) {
77 Popupmenu->setItemChecked(toggleMenu[0], false);
78 emit mode(QString("-i"), 0);
80 else {
81 Popupmenu->setItemChecked(toggleMenu[0], true);
82 emit mode(QString("+i"), 0);
86 void chanButtons::limited()
88 chanDialog = new chanbuttonsDialog(chanbuttonsDialog::limited);
89 chanDialog->exec();
90 if (chanDialog->sendLimitedUsers() == 0) {
91 Popupmenu->setItemChecked(toggleMenu[1], false);
92 emit mode(QString("-l"), 0);
94 else {
95 Popupmenu->setItemChecked(toggleMenu[1], true);
96 emit mode(QString("+l %1").arg(chanDialog->sendLimitedUsers()), 0);
98 delete chanDialog;
101 void chanButtons::key()
103 chanDialog = new chanbuttonsDialog(chanbuttonsDialog::key);
104 if (Popupmenu->isItemChecked(toggleMenu[2])) {
105 chanDialog->exec();
106 Popupmenu->setItemChecked(toggleMenu[2], false);
107 emit mode(QString("-k %1").arg(chanDialog->sendKey()), 0);
109 else {
110 chanDialog->exec();
111 Popupmenu->setItemChecked(toggleMenu[2], true);
112 emit mode(QString("+k %1").arg(chanDialog->sendKey()), 0);
114 delete chanDialog;
117 void chanButtons::secret()
119 if (Popupmenu->isItemChecked(toggleMenu[3])) {
120 Popupmenu->setItemChecked(toggleMenu[3], false);
121 emit mode(QString("-s"), 0);
123 else {
124 Popupmenu->setItemChecked(toggleMenu[3], true);
125 emit mode(QString("+s"), 0);
129 void chanButtons::invisible()
131 if (Popupmenu->isItemChecked(toggleMenu[4])) {
132 Popupmenu->setItemChecked(toggleMenu[4], false);
133 emit mode(QString("-i"), 1, m_proc->getNick());
135 else {
136 Popupmenu->setItemChecked(toggleMenu[4], true);
137 emit mode(QString("+i"), 1, m_proc->getNick());
141 void chanButtons::wallops()
143 if (Popupmenu->isItemChecked(toggleMenu[5])) {
144 Popupmenu->setItemChecked(toggleMenu[5], false);
145 emit mode(QString("-w"), 1, m_proc->getNick());
147 else {
148 Popupmenu->setItemChecked(toggleMenu[5], true);
149 emit mode(QString("+w"), 1, m_proc->getNick());
153 void chanButtons::serverNotices()
155 if (Popupmenu->isItemChecked(toggleMenu[6])) {
156 Popupmenu->setItemChecked(toggleMenu[6], false);
157 emit mode(QString("-s"), 1, m_proc->getNick());
159 else {
160 Popupmenu->setItemChecked(toggleMenu[6], true);
161 emit mode(QString("+s"), 1, m_proc->getNick());
165 void chanButtons::protectMode()
167 if (protectButton->isOn())
168 emit mode(QString("+t"), 0);
169 else
170 emit mode(QString("-t"), 0);
173 void chanButtons::outsideMode()
175 if (outsideButton->isOn())
176 emit mode(QString("+n"), 0);
177 else
178 emit mode(QString("-n"), 0);
181 void chanButtons::moderateMode()
183 if (moderateButton->isOn())
184 emit mode(QString("+m"), 0);
185 else
186 emit mode(QString("-m"), 0);
189 void chanButtons::setButtonsEnabled(bool enabled)
191 // Set all the channel mode entries disabled if non-op else enable them
192 protectButton->setEnabled(enabled);
193 outsideButton->setEnabled(enabled);
194 moderateButton->setEnabled(enabled);
195 Popupmenu->setItemEnabled(toggleMenu[0], enabled);
196 Popupmenu->setItemEnabled(toggleMenu[1], enabled);
197 Popupmenu->setItemEnabled(toggleMenu[2], enabled);
198 Popupmenu->setItemEnabled(toggleMenu[3], enabled);
201 void chanButtons::setMenuItemMode(int id, bool value)
203 Popupmenu->setItemChecked(toggleMenu[id], value);
206 chanbuttonsDialog::chanbuttonsDialog(const type &modeType, QWidget *parent,
207 const char *name, bool modal) : KDialog(parent, name, modal)
209 m_sendKey = "";
210 m_sendLimitedUsers = 0;
211 resize(190, 82);
212 setCaption(i18n("Limit Number of Users"));
213 LimitedLayout = new QVBoxLayout(this);
214 LimitedLayout->setSpacing(9);
215 LimitedLayout->setMargin(11);
217 switch (modeType) {
218 case limited:
219 SpinBox = new KIntSpinBox(this);
220 LimitedLayout->addWidget(SpinBox);
221 break;
222 case key:
223 EditBox = new QLineEdit(this);
224 LimitedLayout->addWidget(EditBox);
225 break;
228 Layout = new QHBoxLayout;
229 Layout->setSpacing(6);
230 Layout->setMargin(0);
232 okButton = new KPushButton(KStdGuiItem::ok(), this);
233 okButton->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1, (QSizePolicy::SizeType)1,
234 okButton->sizePolicy().hasHeightForWidth()));
235 Layout->addWidget(okButton);
236 switch (modeType) {
237 case limited:
238 connect(okButton, SIGNAL(clicked()), SLOT(limitedUsers()));
239 break;
240 case key:
241 connect(okButton, SIGNAL(clicked()), SLOT(keyString()));
242 break;
245 Layout->addWidget(okButton);
247 cancelButton = new KPushButton(KStdGuiItem::cancel(), this);
248 cancelButton->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1, (QSizePolicy::SizeType)1,
249 cancelButton->sizePolicy().hasHeightForWidth()));
250 Layout->addWidget(cancelButton);
251 connect(cancelButton, SIGNAL(clicked()), SLOT(reject()));
252 LimitedLayout->addLayout(Layout);
254 QSpacerItem *spacer = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);
255 LimitedLayout->addItem(spacer);
258 void chanbuttonsDialog::keyString()
260 m_sendKey = EditBox->text();
261 accept();
264 void chanbuttonsDialog::limitedUsers()
266 m_sendLimitedUsers = SpinBox->value();
267 accept();