-void InputWidget::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) {
- QItemSelectionRange changedArea(topLeft, bottomRight);
- if(changedArea.contains(selectionModel()->currentIndex())) {
- updateEnabledState();
- }
-};
-
-void InputWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) {
- NetworkId networkId;
- QModelIndex child;
- for(int row = start; row <= end; row++) {
- child = model()->index(row, 0, parent);
- if(NetworkModel::NetworkItemType != child.data(NetworkModel::ItemTypeRole).toInt())
- continue;
- networkId = child.data(NetworkModel::NetworkIdRole).value<NetworkId>();
- if(networkId == _networkId) {
- setNetwork(0);
- updateNickSelector();
- return;
+void InputWidget::toggleFormatUnderline()
+{
+ setFormatUnderline(!ui.underlineButton->isChecked());
+}
+
+void InputWidget::clearFormat()
+{
+ // Clear all formatting for selection (not global)
+ setFormatClear(false);
+}
+
+void InputWidget::setNetwork(NetworkId networkId)
+{
+ if (_networkId == networkId)
+ return;
+
+ const Network* previousNet = Client::network(_networkId);
+ if (previousNet) {
+ disconnect(previousNet, nullptr, this, nullptr);
+ if (previousNet->me())
+ disconnect(previousNet->me(), nullptr, this, nullptr);
+ }
+
+ _networkId = networkId;
+
+ const Network* network = Client::network(networkId);
+ if (network) {
+ connect(network, &Network::identitySet, this, &InputWidget::setIdentity);
+ connectMyIrcUser();
+ setIdentity(network->identity());
+ }
+ else {
+ setIdentity(0);
+ _networkId = 0;
+ }
+}
+
+void InputWidget::connectMyIrcUser()
+{
+ const Network* network = currentNetwork();
+ if (network->me()) {
+ connect(network->me(), &IrcUser::nickSet, this, &InputWidget::updateNickSelector);
+ connect(network->me(), &IrcUser::userModesSet, this, &InputWidget::updateNickSelector);
+ connect(network->me(), &IrcUser::userModesAdded, this, &InputWidget::updateNickSelector);
+ connect(network->me(), &IrcUser::userModesRemoved, this, &InputWidget::updateNickSelector);
+ connect(network->me(), &IrcUser::awaySet, this, &InputWidget::updateNickSelector);
+ disconnect(network, &Network::myNickSet, this, &InputWidget::connectMyIrcUser);
+ updateNickSelector();
+ }
+ else {
+ connect(network, &Network::myNickSet, this, &InputWidget::connectMyIrcUser);
+ }
+}
+
+void InputWidget::setIdentity(IdentityId identityId)
+{
+ if (_identityId == identityId)
+ return;
+
+ const Identity* previousIdentity = Client::identity(_identityId);
+ if (previousIdentity)
+ disconnect(previousIdentity, nullptr, this, nullptr);
+
+ _identityId = identityId;
+
+ const Identity* identity = Client::identity(identityId);
+ if (identity) {
+ connect(identity, &Identity::nicksSet, this, &InputWidget::updateNickSelector);
+ }
+ else {
+ _identityId = 0;