I had to add some dirty hack in BufferTreeModel for this -> EgS, please check :)
Oh, and I removed the reaaally obsolete ircwidget.ui from svn. This has been rotting
there for months.
src/qtgui/ui/coresettingspage.ui
src/qtgui/ui/identitiesdlg.ui
src/qtgui/ui/identitieseditdlg.ui
-src/qtgui/ui/ircwidget.ui
src/qtgui/ui/mainwin.ui
src/qtgui/ui/networkeditdlg.ui
src/qtgui/ui/nickeditdlg.ui
}
Buffer::~Buffer() {
- //qDebug() << "destroying buffer";
//delete widget;
/*
QSettings s;
QModelIndex BufferTreeModel::getOrCreateBufferItemIndex(Buffer *buffer) {
QModelIndex networkItemIndex = getOrCreateNetworkItemIndex(buffer);
-
+
if(bufferItem.contains(buffer)) {
return index(bufferItem[buffer]->row(), 0, networkItemIndex);
} else {
// first we determine the parent of the new Item
TreeItem *networkItem = static_cast<TreeItem*>(networkItemIndex.internalPointer());
-
+ Q_ASSERT(networkItem);
int nextRow = networkItem->childCount();
beginInsertRows(networkItemIndex, nextRow, nextRow);
QModelIndex index = getOrCreateBufferItemIndex(buffer);
emit selectionChanged(index);
}
+
+// EgS: check if this makes sense!
+void BufferTreeModel::clear() {
+ TreeModel::clear();
+ networkItem.clear();
+ bufferItem.clear();
+}
+
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
// void clearActivity(Buffer *buffer);
+ void clear(); // EgS: check this
public slots:
void bufferUpdated(Buffer *);
Client::~Client() {
//delete mainUi;
//delete _bufferModel;
- foreach(Buffer *buf, buffers.values()) delete buf;
+ foreach(Buffer *buf, buffers.values()) delete buf; // this is done by disconnectFromCore()!
ClientProxy::destroy();
-
+ Q_ASSERT(!buffers.count());
}
BufferTreeModel *Client::bufferModel() {
disconnectFromLocalCore();
coreSocketDisconnected();
}
- /* Clear internal data. Hopefully nothing relies on it at this point. */
- coreConnectionInfo.clear();
- sessionData.clear();
- //foreach(Buffer *buf, buffers.values()) delete buf;
- qDebug() << "barfoo";
- _bufferModel->clear();
- //qDeleteAll(buffers);
- qDebug() << "foobar";
}
void Client::coreSocketConnected() {
void Client::coreSocketDisconnected() {
connectedToCore = false;
emit disconnected();
+ /* Clear internal data. Hopefully nothing relies on it at this point. */
+ _bufferModel->clear();
+ // Buffers, if deleted, send a signal that causes their removal from buffers and bufferIds.
+ // So we cannot simply go through the array in a loop (or use qDeleteAll) for deletion...
+ while(buffers.count()) { delete buffers.take(buffers.keys()[0]); }
+ Q_ASSERT(!buffers.count()); // should be empty now!
+ Q_ASSERT(!bufferIds.count());
+ coreConnectionInfo.clear();
+ sessionData.clear();
+ nicks.clear();
+ netConnected.clear();
+ netsAwaitingInit.clear();
+ ownNick.clear();
+ layoutQueue.clear();
+ layoutTimer->stop();
}
void Client::recvCoreState(const QVariant &state) {
connect(b, SIGNAL(userInput(BufferId, QString)), client, SLOT(userInput(BufferId, QString)));
connect(b, SIGNAL(bufferUpdated(Buffer *)), client, SIGNAL(bufferUpdated(Buffer *)));
connect(b, SIGNAL(bufferDestroyed(Buffer *)), client, SIGNAL(bufferDestroyed(Buffer *)));
+ connect(b, SIGNAL(bufferDestroyed(Buffer *)), client, SLOT(removeBuffer(Buffer *)));
buffers[id] = b;
emit client->bufferUpdated(b);
}
return buffers.keys();
}
+void Client::removeBuffer(Buffer *b) {
+ buffers.remove(b->bufferId());
+ bufferIds.remove(b->bufferId().uid());
+}
+
void Client::recvNetworkState(QString net, QVariant state) {
netsAwaitingInit.removeAll(net);
netConnected[net] = true;
void recvBacklogData(BufferId, const QList<QVariant> &, bool);
void updateBufferId(BufferId);
+ void removeBuffer(Buffer *);
+
void layoutMsg();
private:
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
- void clear();
+ virtual void clear();
protected:
bool removeRow(int row, const QModelIndex &parent = QModelIndex());
SET(qtgui_MOCS bufferview.h bufferviewfilter.h bufferwidget.h channelwidgetinput.h chatline.h chatwidget.h coreconnectdlg.h
guisettings.h identities.h mainwin.h qtgui.h serverlist.h settingsdlg.h settingspages.h tabcompleter.h)
SET(qtgui_UICS identitiesdlg.ui identitieseditdlg.ui networkeditdlg.ui mainwin.ui
- nickeditdlg.ui serverlistdlg.ui servereditdlg.ui coreconnectdlg.ui ircwidget.ui
+ nickeditdlg.ui serverlistdlg.ui servereditdlg.ui coreconnectdlg.ui
bufferviewwidget.ui bufferwidget.ui settingsdlg.ui
buffermgmntsettingspage.ui connectionsettingspage.ui)
ui.menuViews->setEnabled(true);
ui.menuCore->setEnabled(true);
+ ui.actionConnectCore->setEnabled(false);
ui.actionDisconnectCore->setEnabled(true);
ui.actionNetworkList->setEnabled(true);
ui.bufferWidget->show();
+++ /dev/null
-<ui version="4.0" >
- <class>IrcWidget</class>
- <widget class="QWidget" name="IrcWidget" >
- <property name="geometry" >
- <rect>
- <x>0</x>
- <y>0</y>
- <width>733</width>
- <height>531</height>
- </rect>
- </property>
- <property name="windowTitle" >
- <string>Form</string>
- </property>
- <layout class="QVBoxLayout" >
- <property name="margin" >
- <number>9</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="QTabWidget" name="tabWidget" >
- <property name="tabPosition" >
- <enum>QTabWidget::South</enum>
- </property>
- <property name="tabShape" >
- <enum>QTabWidget::Rounded</enum>
- </property>
- <property name="currentIndex" >
- <number>0</number>
- </property>
- <widget class="QWidget" name="tab" >
- <attribute name="title" >
- <string>No connection</string>
- </attribute>
- </widget>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>