1 /* mode buttons for ksirc - Robbie Ward <linuxphreak@gmx.co.uk>*/
3 #include "chanButtons.h"
4 #include "chanButtons.moc"
7 #include <kpopupmenu.h>
9 #include <kstdguiitem.h>
10 #include <kpushbutton.h>
14 #include <qlineedit.h>
16 #include "ksircprocess.h"
18 static void makeSquare(QWidget
*w
)
20 QSize sh
= w
->sizeHint();
25 chanButtons::chanButtons(KSircProcess
*proc
, QWidget
*parent
, const char *name
)
26 : QWidget(parent
, name
),
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);
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);
81 Popupmenu
->setItemChecked(toggleMenu
[0], true);
82 emit
mode(QString("+i"), 0);
86 void chanButtons::limited()
88 chanDialog
= new chanbuttonsDialog(chanbuttonsDialog::limited
);
90 if (chanDialog
->sendLimitedUsers() == 0) {
91 Popupmenu
->setItemChecked(toggleMenu
[1], false);
92 emit
mode(QString("-l"), 0);
95 Popupmenu
->setItemChecked(toggleMenu
[1], true);
96 emit
mode(QString("+l %1").arg(chanDialog
->sendLimitedUsers()), 0);
101 void chanButtons::key()
103 chanDialog
= new chanbuttonsDialog(chanbuttonsDialog::key
);
104 if (Popupmenu
->isItemChecked(toggleMenu
[2])) {
106 Popupmenu
->setItemChecked(toggleMenu
[2], false);
107 emit
mode(QString("-k %1").arg(chanDialog
->sendKey()), 0);
111 Popupmenu
->setItemChecked(toggleMenu
[2], true);
112 emit
mode(QString("+k %1").arg(chanDialog
->sendKey()), 0);
117 void chanButtons::secret()
119 if (Popupmenu
->isItemChecked(toggleMenu
[3])) {
120 Popupmenu
->setItemChecked(toggleMenu
[3], false);
121 emit
mode(QString("-s"), 0);
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());
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());
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());
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);
170 emit
mode(QString("-t"), 0);
173 void chanButtons::outsideMode()
175 if (outsideButton
->isOn())
176 emit
mode(QString("+n"), 0);
178 emit
mode(QString("-n"), 0);
181 void chanButtons::moderateMode()
183 if (moderateButton
->isOn())
184 emit
mode(QString("+m"), 0);
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
)
210 m_sendLimitedUsers
= 0;
212 setCaption(i18n("Limit Number of Users"));
213 LimitedLayout
= new QVBoxLayout(this);
214 LimitedLayout
->setSpacing(9);
215 LimitedLayout
->setMargin(11);
219 SpinBox
= new KIntSpinBox(this);
220 LimitedLayout
->addWidget(SpinBox
);
223 EditBox
= new QLineEdit(this);
224 LimitedLayout
->addWidget(EditBox
);
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
);
238 connect(okButton
, SIGNAL(clicked()), SLOT(limitedUsers()));
241 connect(okButton
, SIGNAL(clicked()), SLOT(keyString()));
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();
264 void chanbuttonsDialog::limitedUsers()
266 m_sendLimitedUsers
= SpinBox
->value();