/*! * \param name Window name * \param type Window type (see constants.h for WT_*) * \param parent Parent ID (typically connection ID) * \param activate Activate window on creation * * Creates a new subwindow.\n * Specify Parent 0 if it's a custom (scriptable window).\n * DCC windows sets their parent to the IConnection that created it. It won't be a child of this IConnection though. * \return -1 if failed, otherwise Window ID */ int IdealIRC::CreateSubWindow(QString name, int type, int parent, bool activate) { if (WindowExists(name, parent) == true) return -1; qDebug() << "Creating new subwindow type " << type << " name " << name; IWin *s; if ((type >= WT_DCCSEND) && (type <= WT_DCCCHAT)) { IConnection *c = conlist.value(parent, NULL); s = new IWin(ui->mdiArea, name, type, &conf, &scriptParent, c); parent = 0; } else s = new IWin(ui->mdiArea, name, type, &conf, &scriptParent); IConnection *connection = conlist.value(parent, NULL); if (type == WT_STATUS) { qDebug() << "Window is status, new connection added with id " << s->getId(); connection = new IConnection(this, &chanlist, s->getId(), &conf, &scriptParent, &wsw); connection->setActiveInfo(&activeWname, &activeConn); connect(connection, SIGNAL(connectionClosed()), this, SLOT(connectionClosed())); connect(connection, SIGNAL(connectedToIRC()), this, SLOT(connectionEstablished())); connect(connection, SIGNAL(RequestTrayMsg(QString,QString)), this, SLOT(trayMessage(QString,QString))); } qDebug() << "Connection added, setting pointers"; s->setConnectionPtr(connection); if (connection != NULL) s->setSortRuleMap(connection->getSortRuleMapPtr()); qDebug() << "Pointers set, setting up mdiSubWindow"; QMdiSubWindow *previous = ui->mdiArea->currentSubWindow(); QMdiSubWindow *sw = ui->mdiArea->addSubWindow(s, Qt::SubWindow); qDebug() << "Pointer to subwindow: " << sw; qDebug() << "Icon..."; // Add icon to window QString ico = ":/window/gfx/custom.png"; // Default to this. if (type == WT_PRIVMSG) ico = ":/window/gfx/query.png"; if (type == WT_CHANNEL) ico = ":/window/gfx/channel.png"; if (type == WT_STATUS) ico = ":/window/gfx/status.png"; sw->setWindowIcon(QIcon(ico)); qDebug() << "Treeitem..."; QTreeWidgetItem *treeitem = GetWidgetItem(parent); if (treeitem == NULL) treeitem = new QTreeWidgetItem(ui->treeWidget); else treeitem = new QTreeWidgetItem(treeitem); treeitem->setIcon(0, QIcon(ico)); treeitem->setText(0, name); treeitem->setToolTip(0, name); qDebug() << "subwindow_t instance..."; subwindow_t wt; wt.connection = connection; wt.parent = parent; wt.subwin = sw; wt.treeitem = treeitem; wt.type = type; wt.wid = s->getId(); wt.widget = s; wt.highlight = HL_NONE; qDebug() << "Adding subwindow_t to winlist..."; winlist.insert(s->getId(), wt); wsw.addWindow(type, name, wt.wid, parent); sw->setGeometry(0, 0, 500, 400); if (type == WT_STATUS) { qDebug() << "Adding connection to the list..."; // The Connection class ID is the exact same ID as the status window ID. conlist.insert(s->getId(), connection); treeitem->setExpanded(true); connection->addWindow("STATUS", wt); connect(connection, SIGNAL(RequestWindow(QString,int,int,bool)), this, SLOT(CreateSubWindow(QString,int,int,bool))); connect(connection, SIGNAL(HighlightWindow(int,int)), this, SLOT(Highlight(int,int))); }