void Core::setAvatar(const QByteArray& data) { if (!data.isEmpty()) { QPixmap pic; pic.loadFromData(data); profile.saveAvatar(data, getSelfPublicKey().toString()); emit selfAvatarChanged(pic); } else { emit selfAvatarChanged(QPixmap(":/img/contact_dark.svg")); } AvatarBroadcaster::setAvatar(data); AvatarBroadcaster::enableAutoBroadcast(); }
void Core::setAvatar(const QByteArray& data) { QPixmap pic; pic.loadFromData(data); Settings::getInstance().saveAvatar(pic, getSelfId().toString()); emit selfAvatarChanged(pic); AvatarBroadcaster::setAvatar(data); AvatarBroadcaster::enableAutoBroadcast(); }
/** * @brief Reinitialized the core. * @warning Must be called from the Core thread, with the GUI thread ready to process events. */ void Core::reset() { assert(QThread::currentThread() == coreThread); QByteArray toxsave = getToxSaveData(); ready = false; killTimers(true); deadifyTox(); emit selfAvatarChanged(QPixmap(":/img/contact_dark.svg")); GUI::clearContacts(); start(toxsave); }
void Core::switchConfiguration(const QString& _profile) { QString profile = QFileInfo(_profile).baseName(); // If we can't get a lock, then another instance is already using that profile while (!profile.isEmpty() && !ProfileLocker::lock(profile)) { qWarning() << "Profile "<<profile<<" is already in use, pick another"; GUI::showWarning(tr("Profile already in use"), tr("Your profile is already used by another qTox instance\n" "Please select another profile")); do { profile = Settings::getInstance().askProfiles(); } while (profile.isEmpty()); } if (profile.isEmpty()) qDebug() << "Core: creating new Id"; else qDebug() << "Core: switching from" << Settings::getInstance().getCurrentProfile() << "to" << profile; saveConfiguration(); saveCurrentInformation(); // part of a hack, see core.h ready = false; GUI::setEnabled(false); clearPassword(ptMain); clearPassword(ptHistory); toxTimer->stop(); deadifyTox(); emit selfAvatarChanged(QPixmap(":/img/contact_dark.svg")); emit blockingClearContacts(); // we need this to block, but signals are required for thread safety if (profile.isEmpty()) loadPath = ""; else loadPath = QDir(Settings::getSettingsDirPath()).filePath(profile + TOX_EXT); Settings::getInstance().switchProfile(profile); HistoryKeeper::resetInstance(); start(); }
void Core::setAvatar(uint8_t format, const QByteArray& data) { if (tox_set_avatar(tox, format, (uint8_t*)data.constData(), data.size()) != 0) { qWarning() << "Core: Failed to set self avatar"; return; } QPixmap pic; pic.loadFromData(data); Settings::getInstance().saveAvatar(pic, getSelfId().toString()); emit selfAvatarChanged(pic); // Broadcast our new avatar! // according to tox.h, we need not broadcast this ourselves, but initial testing indicated elsewise const uint32_t friendCount = tox_count_friendlist(tox);; for (unsigned i=0; i<friendCount; i++) tox_send_avatar_info(tox, i); }
void Widget::init() { ui->setupUi(this); timer = new QTimer(); timer->start(1000); offlineMsgTimer = new QTimer(); offlineMsgTimer->start(15000); //restore window state restoreGeometry(Settings::getInstance().getWindowGeometry()); restoreState(Settings::getInstance().getWindowState()); ui->mainSplitter->restoreState(Settings::getInstance().getSplitterState()); statusOnline = new QAction(tr("Online", "Button to set your status to 'Online'"), this); statusOnline->setIcon(getStatusIcon(Status::Online, 10, 10)); connect(statusOnline, SIGNAL(triggered()), this, SLOT(setStatusOnline())); statusAway = new QAction(tr("Away", "Button to set your status to 'Away'"), this); statusAway->setIcon(getStatusIcon(Status::Away, 10, 10)); connect(statusAway, SIGNAL(triggered()), this, SLOT(setStatusAway())); statusBusy = new QAction(tr("Busy", "Button to set your status to 'Busy'"), this); statusBusy->setIcon(getStatusIcon(Status::Busy, 10, 10)); connect(statusBusy, SIGNAL(triggered()), this, SLOT(setStatusBusy())); ui->statusbar->hide(); ui->menubar->hide(); layout()->setContentsMargins(0, 0, 0, 0); ui->friendList->setStyleSheet(Style::resolve(Style::getStylesheet(":ui/friendList/friendList.css"))); profilePicture = new MaskablePixmapWidget(this, QSize(40, 40), ":/img/avatar_mask.svg"); profilePicture->setPixmap(QPixmap(":/img/contact_dark.svg")); profilePicture->setClickable(true); ui->myProfile->insertWidget(0, profilePicture); ui->myProfile->insertSpacing(1, 7); ui->mainContent->setLayout(new QVBoxLayout()); ui->mainHead->setLayout(new QVBoxLayout()); ui->mainHead->layout()->setMargin(0); ui->mainHead->layout()->setSpacing(0); ui->tooliconsZone->setStyleSheet(Style::resolve("QPushButton{background-color:@themeDark;border:none;}QPushButton:hover{background-color:@themeMediumDark;border:none;}")); if (QStyleFactory::keys().contains(Settings::getInstance().getStyle()) && Settings::getInstance().getStyle() != "None") { ui->mainHead->setStyle(QStyleFactory::create(Settings::getInstance().getStyle())); ui->mainContent->setStyle(QStyleFactory::create(Settings::getInstance().getStyle())); } ui->mainHead->setStyleSheet(Style::getStylesheet(":ui/settings/mainHead.css")); ui->mainContent->setStyleSheet(Style::getStylesheet(":ui/settings/mainContent.css")); ui->statusHead->setStyleSheet(Style::getStylesheet(":/ui/window/statusPanel.css")); contactListWidget = new FriendListWidget(0, Settings::getInstance().getGroupchatPosition()); ui->friendList->setWidget(contactListWidget); ui->friendList->setLayoutDirection(Qt::RightToLeft); ui->statusLabel->setEditable(true); ui->statusPanel->setStyleSheet(Style::getStylesheet(":/ui/window/statusPanel.css")); QMenu *statusButtonMenu = new QMenu(ui->statusButton); statusButtonMenu->addAction(statusOnline); statusButtonMenu->addAction(statusAway); statusButtonMenu->addAction(statusBusy); ui->statusButton->setMenu(statusButtonMenu); // disable proportional scaling ui->mainSplitter->setStretchFactor(0,0); ui->mainSplitter->setStretchFactor(1,1); onStatusSet(Status::Offline); // Disable some widgets until we're connected to the DHT ui->statusButton->setEnabled(false); Style::setThemeColor(Settings::getInstance().getThemeColor()); reloadTheme(); updateIcons(); filesForm = new FilesForm(); addFriendForm = new AddFriendForm; profileForm = new ProfileForm(); settingsWidget = new SettingsWidget(); Core* core = Nexus::getCore(); connect(core, SIGNAL(fileDownloadFinished(const QString&)), filesForm, SLOT(onFileDownloadComplete(const QString&))); connect(core, SIGNAL(fileUploadFinished(const QString&)), filesForm, SLOT(onFileUploadComplete(const QString&))); connect(settingsWidget, &SettingsWidget::setShowSystemTray, this, &Widget::onSetShowSystemTray); connect(core, SIGNAL(selfAvatarChanged(QPixmap)), profileForm, SLOT(onSelfAvatarLoaded(QPixmap))); connect(ui->addButton, SIGNAL(clicked()), this, SLOT(onAddClicked())); connect(ui->groupButton, SIGNAL(clicked()), this, SLOT(onGroupClicked())); connect(ui->transferButton, SIGNAL(clicked()), this, SLOT(onTransferClicked())); connect(ui->settingsButton, SIGNAL(clicked()), this, SLOT(onSettingsClicked())); connect(profilePicture, &MaskablePixmapWidget::clicked, this, &Widget::showProfile); connect(ui->nameLabel, &CroppingLabel::clicked, this, &Widget::showProfile); connect(ui->statusLabel, SIGNAL(textChanged(QString, QString)), this, SLOT(onStatusMessageChanged(QString, QString))); connect(ui->mainSplitter, &QSplitter::splitterMoved, this, &Widget::onSplitterMoved); connect(addFriendForm, SIGNAL(friendRequested(QString, QString)), this, SIGNAL(friendRequested(QString, QString))); connect(timer, &QTimer::timeout, this, &Widget::onUserAwayCheck); connect(timer, &QTimer::timeout, this, &Widget::onEventIconTick); connect(timer, &QTimer::timeout, this, &Widget::onTryCreateTrayIcon); connect(offlineMsgTimer, &QTimer::timeout, this, &Widget::processOfflineMsgs); addFriendForm->show(*ui); connect(settingsWidget, &SettingsWidget::groupchatPositionToggled, contactListWidget, &FriendListWidget::onGroupchatPositionChanged); #if (AUTOUPDATE_ENABLED) if (Settings::getInstance().getCheckUpdates()) AutoUpdater::checkUpdatesAsyncInteractive(); #endif if (!Settings::getInstance().getShowSystemTray()) show(); }