awayButtons.diff
| src/common/network.cpp | ||
|---|---|---|
| 41 | 41 |
_networkName(QString("<not initialized>")),
|
| 42 | 42 |
_currentServer(QString()), |
| 43 | 43 |
_connected(false), |
| 44 |
_away(false), |
|
| 44 | 45 |
_connectionState(Disconnected), |
| 45 | 46 |
_prefixes(QString()), |
| 46 | 47 |
_prefixModes(QString()), |
| ... | ... | |
| 499 | 500 |
if(!_myNick.isEmpty() && !ircUser(myNick())) {
|
| 500 | 501 |
newIrcUser(myNick()); |
| 501 | 502 |
} |
| 503 |
//Avoid duplicating connection if nick is changed |
|
| 504 |
disconnect(me(), SIGNAL(awaySet(bool)), this, 0); |
|
| 505 |
connect(me(), SIGNAL(awaySet(bool)), this, SLOT(setAway(bool))); |
|
| 502 | 506 |
emit myNickSet(nickname); |
| 503 | 507 |
} |
| 504 | 508 | |
| ... | ... | |
| 514 | 518 |
emit identitySet(id); |
| 515 | 519 |
} |
| 516 | 520 | |
| 521 |
void Network::setAway(const bool &away) {
|
|
| 522 |
if(away != _away) {
|
|
| 523 |
_away = away; |
|
| 524 |
emit awaySet(away); |
|
| 525 |
} |
|
| 526 |
} |
|
| 527 | ||
| 517 | 528 |
void Network::setServerList(const QVariantList &serverList) {
|
| 518 | 529 |
_serverList = fromVariantList<Server>(serverList); |
| 519 | 530 |
emit serverListSet(serverList); |
| src/common/network.h | ||
|---|---|---|
| 56 | 56 |
Q_PROPERTY(QByteArray codecForDecoding READ codecForDecoding WRITE setCodecForDecoding STORED false) |
| 57 | 57 |
Q_PROPERTY(IdentityId identityId READ identity WRITE setIdentity STORED false) |
| 58 | 58 |
Q_PROPERTY(bool isConnected READ isConnected WRITE setConnected STORED false) |
| 59 |
Q_PROPERTY(bool away READ isAway WRITE setAway STORED false) |
|
| 59 | 60 |
//Q_PROPERTY(Network::ConnectionState connectionState READ connectionState WRITE setConnectionState STORED false) |
| 60 | 61 |
Q_PROPERTY(int connectionState READ connectionState WRITE setConnectionState STORED false) |
| 61 | 62 |
Q_PROPERTY(bool useRandomServer READ useRandomServer WRITE setUseRandomServer STORED false) |
| ... | ... | |
| 143 | 144 |
inline const QString &myNick() const { return _myNick; }
|
| 144 | 145 |
inline int latency() const { return _latency; }
|
| 145 | 146 |
inline IrcUser *me() const { return ircUser(myNick()); }
|
| 147 |
inline bool isAway() const { return _away; }
|
|
| 146 | 148 |
inline IdentityId identity() const { return _identity; }
|
| 147 | 149 |
QStringList nicks() const; |
| 148 | 150 |
inline QStringList channels() const { return _ircChannels.keys(); }
|
| ... | ... | |
| 215 | 217 |
virtual void setMyNick(const QString &mynick); |
| 216 | 218 |
void setLatency(int latency); |
| 217 | 219 |
void setIdentity(IdentityId); |
| 220 |
void setAway(const bool &away); |
|
| 218 | 221 | |
| 219 | 222 |
void setServerList(const QVariantList &serverList); |
| 220 | 223 |
void setUseRandomServer(bool); |
| ... | ... | |
| 276 | 279 |
void myNickSet(const QString &mynick); |
| 277 | 280 |
void latencySet(int latency); |
| 278 | 281 |
void identitySet(IdentityId); |
| 282 |
void awaySet(bool away); |
|
| 279 | 283 | |
| 280 | 284 |
void serverListSet(QVariantList serverList); |
| 281 | 285 |
void useRandomServerSet(bool); |
| ... | ... | |
| 319 | 323 |
QString _networkName; |
| 320 | 324 |
QString _currentServer; |
| 321 | 325 |
bool _connected; |
| 326 |
bool _away; |
|
| 322 | 327 |
ConnectionState _connectionState; |
| 323 | 328 | |
| 324 | 329 |
QString _prefixes; |
| src/uisupport/networkmodelcontroller.cpp | ||
|---|---|---|
| 196 | 196 |
} |
| 197 | 197 | |
| 198 | 198 |
void NetworkModelController::handleNetworkAction(ActionType type, QAction *) {
|
| 199 |
if(type == NetworkConnectAll || type == NetworkDisconnectAll) {
|
|
| 199 |
if(type == NetworkConnectAll || type == NetworkDisconnectAll || type == NetworkAwayAll || type == NetworkBackAll) {
|
|
| 200 | 200 |
foreach(NetworkId id, Client::networkIds()) {
|
| 201 | 201 |
const Network *net = Client::network(id); |
| 202 | 202 |
if(type == NetworkConnectAll && net->connectionState() == Network::Disconnected) |
| 203 | 203 |
net->requestConnect(); |
| 204 |
if(type == NetworkDisconnectAll && net->connectionState() != Network::Disconnected) |
|
| 204 |
else if(type == NetworkDisconnectAll && net->connectionState() != Network::Disconnected)
|
|
| 205 | 205 |
net->requestDisconnect(); |
| 206 |
else if(type == NetworkBackAll && net->connectionState() != Network::Disconnected && net->isAway()) |
|
| 207 |
Client::userInput(BufferInfo::fakeStatusBuffer(id), QString("/AWAY"));
|
|
| 208 |
else if(type == NetworkAwayAll && net->connectionState() != Network::Disconnected && !net->isAway()) |
|
| 209 |
Client::userInput(BufferInfo::fakeStatusBuffer(id), QString("/AWAY %1").arg(Client::identity(net->identity())->awayReason()));
|
|
| 206 | 210 |
} |
| 207 | 211 |
return; |
| 208 | 212 |
} |
| 209 | 213 | |
| 210 | 214 |
if(!indexList().count()) |
| 211 | 215 |
return; |
| 212 | ||
| 216 |
|
|
| 213 | 217 |
const Network *network = Client::network(indexList().at(0).data(NetworkModel::NetworkIdRole).value<NetworkId>()); |
| 214 | 218 |
Q_CHECK_PTR(network); |
| 215 | 219 |
if(!network) |
| ... | ... | |
| 222 | 226 |
case NetworkDisconnect: |
| 223 | 227 |
network->requestDisconnect(); |
| 224 | 228 |
break; |
| 229 |
case NetworkBack: |
|
| 230 |
Client::userInput(BufferInfo::fakeStatusBuffer(network->networkId()), QString("/AWAY"));
|
|
| 231 |
break; |
|
| 232 |
case NetworkAway: |
|
| 233 |
Client::userInput(BufferInfo::fakeStatusBuffer(network->networkId()), |
|
| 234 |
QString("/AWAY %1").arg(Client::identity(network->identity())->awayReason()));
|
|
| 225 | 235 |
default: |
| 226 | 236 |
break; |
| 227 | 237 |
} |
| src/uisupport/networkmodelcontroller.h | ||
|---|---|---|
| 46 | 46 |
NetworkDisconnect = 0x02, |
| 47 | 47 |
NetworkConnectAll = 0x03, |
| 48 | 48 |
NetworkDisconnectAll = 0x04, |
| 49 |
NetworkAway = 0x05, |
|
| 50 |
NetworkBack = 0x06, |
|
| 51 |
NetworkAwayAll = 0x07, |
|
| 52 |
NetworkBackAll = 0x08, |
|
| 49 | 53 | |
| 50 | 54 |
// Buffer actions |
| 51 | 55 |
BufferMask = 0xf0, |
| src/uisupport/toolbaractionprovider.cpp | ||
|---|---|---|
| 24 | 24 |
#include "toolbaractionprovider.h" |
| 25 | 25 | |
| 26 | 26 |
#include "iconloader.h" |
| 27 |
#include "identity.h" |
|
| 27 | 28 | |
| 28 | 29 |
ToolBarActionProvider::ToolBarActionProvider(QObject *parent) |
| 29 | 30 |
: NetworkModelController(parent) |
| 30 | 31 |
{
|
| 31 | 32 |
registerAction(NetworkConnectAll, MainBarIcon("network-connect"), tr("Connect"))->setToolTip(tr("Connect to IRC"));
|
| 32 | 33 |
registerAction(NetworkDisconnectAll, MainBarIcon("network-disconnect"), tr("Disconnect"))->setToolTip(tr("Disconnect from IRC"));
|
| 34 |
registerAction(NetworkBackAll, MainBarIcon("im-user"), tr("Back"))->setToolTip(tr("Set as back"));
|
|
| 35 |
registerAction(NetworkAwayAll, MainBarIcon("im-user-away"), tr("Away"))->setToolTip(tr("Set as away"));
|
|
| 33 | 36 | |
| 34 | 37 |
registerAction(BufferPart, MainBarIcon("irc-close-channel"), tr("Part"))->setToolTip(tr("Leave currently selected channel"));
|
| 35 | 38 |
registerAction(JoinChannel, MainBarIcon("irc-join-channel"), tr("Join"))->setToolTip(tr("Join a channel"));
|
| ... | ... | |
| 61 | 64 |
_networksDisconnectMenu->addAction(tr("Disconnect from all"));
|
| 62 | 65 |
action(NetworkDisconnectAll)->setMenu(_networksDisconnectMenu); |
| 63 | 66 |
action(NetworkDisconnectAll)->setEnabled(false); |
| 67 |
|
|
| 68 |
_networksBackMenu = new QMenu(); |
|
| 69 |
_networksBackMenu->setSeparatorsCollapsible(false); |
|
| 70 |
_networksBackMenu->addSeparator(); |
|
| 71 |
_networksBackMenu->addAction(tr("Back to all"));
|
|
| 72 |
action(NetworkBackAll)->setMenu(_networksBackMenu); |
|
| 73 |
action(NetworkBackAll)->setEnabled(false); |
|
| 74 |
|
|
| 75 |
_networksAwayMenu = new QMenu(); |
|
| 76 |
_networksAwayMenu->setSeparatorsCollapsible(false); |
|
| 77 |
_networksAwayMenu->addSeparator(); |
|
| 78 |
_networksAwayMenu->addAction(tr("Away from all"));
|
|
| 79 |
action(NetworkAwayAll)->setMenu(_networksAwayMenu); |
|
| 80 |
action(NetworkAwayAll)->setEnabled(false); |
|
| 64 | 81 | |
| 65 | 82 |
connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), SLOT(networkCreated(NetworkId))); |
| 66 | 83 |
connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), SLOT(networkRemoved(NetworkId))); |
| ... | ... | |
| 84 | 101 |
case MainToolBar: |
| 85 | 102 |
bar->addAction(action(NetworkConnectAll)); |
| 86 | 103 |
bar->addAction(action(NetworkDisconnectAll)); |
| 104 |
bar->addAction(action(NetworkBackAll)); |
|
| 105 |
bar->addAction(action(NetworkAwayAll)); |
|
| 87 | 106 |
bar->addAction(action(JoinChannel)); |
| 88 | 107 |
bar->addAction(action(BufferPart)); |
| 89 | 108 |
break; |
| ... | ... | |
| 137 | 156 | |
| 138 | 157 |
void ToolBarActionProvider::networkCreated(NetworkId id) {
|
| 139 | 158 |
const Network *net = Client::network(id); |
| 140 |
Action *act = new Action(net->networkName(), this); |
|
| 141 |
_networkActions[id] = act; |
|
| 142 |
act->setObjectName(QString("NetworkAction-%1").arg(id.toInt()));
|
|
| 143 |
act->setData(QVariant::fromValue<NetworkId>(id)); |
|
| 159 |
Action *connectAct = new Action(net->networkName(), this); |
|
| 160 |
_connectActions[id] = connectAct; |
|
| 161 |
connectAct->setObjectName(QString("ConnectAction-%1").arg(id.toInt()));
|
|
| 162 |
connectAct->setData(QVariant::fromValue<NetworkId>(id)); |
|
| 163 |
|
|
| 164 |
Action *awayAct = new Action(net->networkName(), this); |
|
| 165 |
_awayActions[id] = awayAct; |
|
| 166 |
awayAct->setObjectName(QString("AwayAction-%1").arg(id.toInt()));
|
|
| 167 |
awayAct->setData(QVariant::fromValue<NetworkId>(id)); |
|
| 168 |
|
|
| 144 | 169 |
connect(net, SIGNAL(updatedRemotely()), SLOT(networkUpdated())); |
| 145 |
connect(act, SIGNAL(triggered()), SLOT(connectOrDisconnectNet())); |
|
| 170 |
connect(net, SIGNAL(awaySet(bool)), SLOT(awayUpdated())); |
|
| 171 |
connect(connectAct, SIGNAL(triggered()), SLOT(connectOrDisconnectNet())); |
|
| 172 |
connect(awayAct, SIGNAL(triggered()), SLOT(awayOrBackNet())); |
|
| 146 | 173 |
networkUpdated(net); |
| 147 | 174 |
} |
| 148 | 175 | |
| 149 | 176 |
void ToolBarActionProvider::networkRemoved(NetworkId id) {
|
| 150 |
Action *act = _networkActions.take(id); |
|
| 151 |
if(act) |
|
| 152 |
act->deleteLater(); |
|
| 177 |
Action *awayAct = _awayActions.take(id); |
|
| 178 |
if(awayAct) |
|
| 179 |
awayAct->deleteLater(); |
|
| 180 |
Action *connectAct = _connectActions.take(id); |
|
| 181 |
if(connectAct) |
|
| 182 |
connectAct->deleteLater(); |
|
| 153 | 183 |
} |
| 154 | 184 | |
| 155 | 185 |
void ToolBarActionProvider::networkUpdated(const Network *net) {
|
| ... | ... | |
| 157 | 187 |
net = qobject_cast<const Network *>(sender()); |
| 158 | 188 |
if(!net) |
| 159 | 189 |
return; |
| 160 |
Action *act = _networkActions.value(net->networkId()); |
|
| 161 |
if(!act) |
|
| 190 |
Action *connectAct = _connectActions.value(net->networkId()); |
|
| 191 |
Action *awayAct = _awayActions.value(net->networkId()); |
|
| 192 |
if(!connectAct || !awayAct) |
|
| 162 | 193 |
return; |
| 163 | 194 | |
| 164 |
_networksConnectMenu->removeAction(act); |
|
| 165 |
_networksDisconnectMenu->removeAction(act); |
|
| 195 |
_networksConnectMenu->removeAction(connectAct); |
|
| 196 |
_networksDisconnectMenu->removeAction(connectAct); |
|
| 197 |
_networksBackMenu->removeAction(awayAct); |
|
| 198 |
_networksAwayMenu->removeAction(awayAct); |
|
| 199 |
|
|
| 200 |
connectAct->setText(net->networkName()); |
|
| 201 |
awayAct->setText(net->networkName()); |
|
| 202 |
if (net->connectionState() == Network::Disconnected) {
|
|
| 203 |
addActionToMenu(connectAct, _networksConnectMenu); |
|
| 204 |
} else {
|
|
| 205 |
addActionToMenu(connectAct, _networksDisconnectMenu); |
|
| 206 |
if (net->isAway()) |
|
| 207 |
addActionToMenu(awayAct, _networksBackMenu); |
|
| 208 |
else |
|
| 209 |
addActionToMenu(awayAct, _networksAwayMenu); |
|
| 210 |
} |
|
| 211 |
|
|
| 212 |
action(NetworkConnectAll)->setEnabled(_networksConnectMenu->actions().count() > 2); |
|
| 213 |
action(NetworkDisconnectAll)->setEnabled(_networksDisconnectMenu->actions().count() > 2); |
|
| 214 |
action(NetworkBackAll)->setEnabled(_networksBackMenu->actions().count() > 2); |
|
| 215 |
action(NetworkAwayAll)->setEnabled(_networksAwayMenu->actions().count() > 2); |
|
| 216 |
action(JoinChannel)->setEnabled(_networksDisconnectMenu->actions().count() > 2); |
|
| 217 |
} |
|
| 166 | 218 | |
| 167 |
QMenu *newMenu = net->connectionState() != Network::Disconnected ? _networksDisconnectMenu : _networksConnectMenu; |
|
| 168 |
act->setText(net->networkName()); |
|
| 219 |
void ToolBarActionProvider::awayUpdated(const Network *net) {
|
|
| 220 |
if(!net) |
|
| 221 |
net = qobject_cast<const Network *>(sender()); |
|
| 222 |
if(!net || net->connectionState() == Network::Disconnected) |
|
| 223 |
return; |
|
| 224 |
Action *awayAct = _awayActions.value(net->networkId()); |
|
| 225 |
if (!awayAct) |
|
| 226 |
return; |
|
| 227 |
|
|
| 228 |
_networksBackMenu->removeAction(awayAct); |
|
| 229 |
_networksAwayMenu->removeAction(awayAct); |
|
| 230 |
if (net->isAway()) |
|
| 231 |
addActionToMenu(awayAct, _networksBackMenu); |
|
| 232 |
else |
|
| 233 |
addActionToMenu(awayAct, _networksAwayMenu); |
|
| 234 |
|
|
| 235 |
action(NetworkBackAll)->setEnabled(_networksBackMenu->actions().count() > 2); |
|
| 236 |
action(NetworkAwayAll)->setEnabled(_networksAwayMenu->actions().count() > 2); |
|
| 237 |
} |
|
| 169 | 238 | |
| 170 |
const int lastidx = newMenu->actions().count() - 2; |
|
| 171 |
QAction *beforeAction = newMenu->actions().at(lastidx); |
|
| 172 |
for(int i = 0; i < newMenu->actions().count() - 2; i++) {
|
|
| 173 |
QAction *action = newMenu->actions().at(i); |
|
| 174 |
if(net->networkName().localeAwareCompare(action->text()) < 0) {
|
|
| 239 |
void ToolBarActionProvider::addActionToMenu(Action *act, QMenu *menu) {
|
|
| 240 |
const int lastidx = menu->actions().count() - 2; |
|
| 241 |
QAction *beforeAction = menu->actions().at(lastidx); |
|
| 242 |
for(int i = 0; i < menu->actions().count() - 2; i++) {
|
|
| 243 |
QAction *action = menu->actions().at(i); |
|
| 244 |
if(act->text().localeAwareCompare(action->text()) < 0) {
|
|
| 175 | 245 |
beforeAction = action; |
| 176 | 246 |
break; |
| 177 | 247 |
} |
| 178 | 248 |
} |
| 179 |
newMenu->insertAction(beforeAction, act); |
|
| 180 | ||
| 181 |
action(NetworkConnectAll)->setEnabled(_networksConnectMenu->actions().count() > 2); |
|
| 182 |
action(NetworkDisconnectAll)->setEnabled(_networksDisconnectMenu->actions().count() > 2); |
|
| 183 |
action(JoinChannel)->setEnabled(_networksDisconnectMenu->actions().count() > 2); |
|
| 249 |
menu->insertAction(beforeAction, act); |
|
| 184 | 250 |
} |
| 185 | 251 | |
| 186 | 252 |
void ToolBarActionProvider::connectOrDisconnectNet() {
|
| ... | ... | |
| 191 | 257 |
if(!net) |
| 192 | 258 |
return; |
| 193 | 259 | |
| 194 |
if(net->connectionState() == Network::Disconnected) net->requestConnect(); |
|
| 195 |
else net->requestDisconnect(); |
|
| 260 |
if(net->connectionState() == Network::Disconnected) |
|
| 261 |
net->requestConnect(); |
|
| 262 |
else |
|
| 263 |
net->requestDisconnect(); |
|
| 264 |
} |
|
| 265 | ||
| 266 |
void ToolBarActionProvider::awayOrBackNet() {
|
|
| 267 |
QAction *act = qobject_cast<QAction *>(sender()); |
|
| 268 |
if(!act) |
|
| 269 |
return; |
|
| 270 |
const Network *net = Client::network(act->data().value<NetworkId>()); |
|
| 271 |
if(!net) |
|
| 272 |
return; |
|
| 273 | ||
| 274 |
BufferInfo bufferInfo = BufferInfo::fakeStatusBuffer(net->networkId()); |
|
| 275 |
if(net->isAway()) |
|
| 276 |
Client::userInput(bufferInfo, QString("/AWAY"));
|
|
| 277 |
else |
|
| 278 |
Client::userInput(bufferInfo, QString("/AWAY %1").arg(Client::identity(net->identity())->awayReason()));
|
|
| 196 | 279 |
} |
| 197 | 280 | |
| 198 | 281 |
//void ToolBarActionProvider:: |
| src/uisupport/toolbaractionprovider.h | ||
|---|---|---|
| 50 | 50 |
void networkCreated(NetworkId id); |
| 51 | 51 |
void networkRemoved(NetworkId id); |
| 52 | 52 |
void networkUpdated(const Network *net = 0); |
| 53 |
void awayUpdated(const Network *net = 0); |
|
| 53 | 54 |
void connectOrDisconnectNet(); |
| 55 |
void awayOrBackNet(); |
|
| 54 | 56 | |
| 55 | 57 |
void currentBufferChanged(const QModelIndex &); |
| 56 | 58 |
void nickSelectionChanged(const QModelIndexList &); |
| ... | ... | |
| 58 | 60 |
void updateStates(); |
| 59 | 61 | |
| 60 | 62 |
private: |
| 61 |
QMenu *_networksConnectMenu, *_networksDisconnectMenu; |
|
| 62 |
QHash<NetworkId, Action *> _networkActions;
|
|
| 63 |
QMenu *_networksConnectMenu, *_networksDisconnectMenu, *_networksBackMenu, *_networksAwayMenu;
|
|
| 64 |
QHash<NetworkId, Action *> _connectActions, _awayActions;
|
|
| 63 | 65 |
QModelIndex _currentBuffer; |
| 64 | 66 |
QModelIndexList _selectedNicks; |
| 67 |
|
|
| 68 |
void addActionToMenu(Action *action, QMenu *menu); |
|
| 65 | 69 |
}; |
| 66 | 70 | |
| 67 | 71 |
#endif |