📄 chatcore_settings.cpp
字号:
/*************************************************************************** * Copyright (C) 2007 by Anistratov Oleg * * ower@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License version 2 * * as published by the Free Software Foundation; * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * ***************************************************************************/#include "chatcore.h"#include "globals.h"#include <QMapIterator>#include <QApplication>#include "inputtextwgt.h"#include "qchatsettings.h"#include "userinfo.h"#include "userprofile.h"#include "channelwgt.h"#include "userlisticonformat.h"//\*****************************************************************************bool ChatCore::initSettings(QString dirName){ QString home = homePath(); QFile file; QDir settingsDir(home); QString path; if(!dirName.isEmpty()) { path = dirName + QString("/settings.ini" ); m_qsettings = new QSettings(path, QSettings::IniFormat); } else if(home.isEmpty()) { return false; } else { dirName = QString("%1/%2").arg(home).arg(".qchat"); if(!QDir(dirName).exists()) { printf("[ChatCore::initSettings]: settingsDir does not exists...\n"); if(settingsDir.mkdir(".qchat")) printf(" created!\n"); else { printf(" and cannot create :(\n"); return false; } } // TODO sdelat' proverku na readOnly i v etom sluchae vyvodit' dialog vybora faila nastroek path = dirName + QString("/settings.ini"); m_qsettings = new QSettings(path, QSettings::IniFormat); if(!QDir(QChatSettings::loggingDir()).exists()) { printf("[ChatCore::initSettings]: chatLogDir does not exists...\n"); if(QDir("").mkpath(QChatSettings::loggingDir())) printf(" created!\n"); else { printf(" and cannot create :(\n"); QChatSettings::setLoggingDir(""); } } } printf("[ChatCore::initSettings]: settingsDir = %s\n", dirName.toLocal8Bit().data()); QChatSettings::setSettingsDir(dirName); if(QFile::exists(dirName + "/Charmap")) InputTextWgt::initChars(dirName + "/Charmap");#ifdef Q_OS_LINUX else if(QFile::exists(QApplication::applicationDirPath() + "/../share/qchat/Charmap")) InputTextWgt::initChars(QCoreApplication::applicationDirPath() + "/../share/qchat/Charmap");#else else if(QFile::exists(QApplication::applicationDirPath() + "/Charmap")) InputTextWgt::initChars(QApplication::applicationDirPath() + "/Charmap");#endif return true;}//\*****************************************************************************void ChatCore::slot_saveSettings(){ saveSettings(false);}void ChatCore::saveSettings(bool on_quit){ // FIXME !!! settings()->setMode(QChatSettings::Serverless); QByteArray data; QByteArray ba; QBuffer buffer; qDebug("[ChatCore::saveSettings]"); QChatSettings::settings()->saveGeneralOptions(m_qsettings); m_qsettings->beginGroup("Network"); m_qsettings->setValue ("Broadcast" , QChatSettings::settings()->realBroadcast().toString()); QStringList ipList; foreach(QHostAddress ip, QChatSettings::settings()->ipList()) ipList.append(ip.toString()); m_qsettings->setValue("IPList", ipList); m_qsettings->endGroup (); //*************************** QMapIterator<QString, UserProfile*> pr(m_profiles); QStringList profiles; while (pr.hasNext()) { pr.next(); writeProfile(pr.value()); profiles << pr.key(); } //********************************** m_qsettings->setValue("ProfileNames", profiles); m_qsettings->setValue("LastProfile" , m_currentProfile->name()); m_qsettings->setValue("Language" , m_lang); if(m_chatWgt && on_quit) { m_qsettings->setValue("Geometry", m_chatWgt->saveGeometry()); m_qsettings->setValue("MainWindowState", m_chatWgt->saveState()); QList<ChannelWgt*> l = m_chatWgt->channels(); foreach(ChannelWgt* c, l) setChannelState(c->name(), c->saveState()); } m_qsettings->setValue("ChannelsStates", QStringList(m_channelsStates.keys())); QMapIterator<QString, QByteArray> ch(m_channelsStates); while (ch.hasNext()) { ch.next(); m_qsettings->setValue(ch.key() + "ChannelState", ch.value()); } m_qsettings->sync(); // FIXME !!! settings()->setMode((QChatSettings::Mode)m_mode);}//\*****************************************************************************void ChatCore::slot_loadSettings(){ QNetworkAddressEntry addr; QString str; QStringList profiles; QChatSettings::settings()->loadGeneralOptions(m_qsettings); m_qsettings->beginGroup("Network"); if(!QChatSettings::settings()->boolOption("AllowDifferentPorts")) QChatSettings::settings()->setOption("OutputPort", QChatSettings::settings()->option("InputPort")); //******************************* addr.setIp(QHostAddress(QString(m_qsettings->value("IP").toByteArray().data ()))); addr.setBroadcast(QHostAddress(QString(m_qsettings->value("Broadcast").toByteArray().data ()))); QStringList ipList; ipList = m_qsettings->value("IPList").toStringList(); foreach(QString ip, ipList) QChatSettings::addIpListEntry(QHostAddress(ip)); QList<QNetworkInterface> all_i = QNetworkInterface::allInterfaces(); QList<QNetworkAddressEntry> valid_a; // get all valid(that can broadcast) interfaces foreach(QNetworkInterface i, all_i) foreach(QNetworkAddressEntry a, i.addressEntries()) { if(a.broadcast().isNull()) continue; valid_a.append(a); } // this will be used to determine do we need to // warning user about problems with network settings m_needCheckIp = 1 + valid_a.isEmpty(); // if network settings was not set yet // or they are is broken we are try to set correct ones if(addr.ip().isNull() && !valid_a.isEmpty()) addr = valid_a[0]; else if(addr.broadcast().isNull() && !valid_a.isEmpty()) addr.setBroadcast(valid_a[0].broadcast()); // are network settings corresponds any of existing interface? foreach(QNetworkAddressEntry a, valid_a) if((a.ip() == addr.ip()) && (a.broadcast() == addr.broadcast())) { m_needCheckIp = 0; break; } QChatSettings::settings()->setOption("IP", addr.ip().toString()); QChatSettings::settings()->setOption("Broadcast", addr.broadcast().toString()); QHostAddress tmp; tmp = QHostAddress(m_qsettings->value("CustomIP").toString()); if(!tmp.isNull()) addr.setIp(tmp); tmp = QHostAddress(m_qsettings->value("CustomBroadcast").toString()); if(!tmp.isNull()) addr.setBroadcast(tmp); QChatSettings::settings()->setOption("CustomIP", addr.ip().toString()); QChatSettings::settings()->setOption("CustomBroadcast", addr.broadcast().toString()); //******************************* m_qsettings->endGroup(); //*************************** profiles = m_qsettings->value("ProfileNames", QStringList()).toStringList(); str = m_qsettings->value("LastProfile" , "Default").toString(); m_geometry = m_qsettings->value("Geometry").toByteArray(); m_state = m_qsettings->value("MainWindowState").toByteArray(); m_lang = m_qsettings->value("Language").toString(); QStringList channels = m_qsettings->value("ChannelsStates", QStringList()).toStringList(); foreach(QString s, channels) m_channelsStates.insert(s, m_qsettings->value(s + "ChannelState").toByteArray());// m_channelsStates.insert("Main", m_qsettings->value("MainChannelState").toByteArray()); if(profiles.isEmpty()) m_profiles.insert("Default", readProfile("Default")); else foreach(QString s, profiles) m_profiles.insert(s, readProfile(s)); slot_loadProfile(str);}//\*****************************************************************************UserProfile* ChatCore::readProfile(const QString & name){ UserInfo* info = new UserInfo; QChatSettings* prefs = new QChatSettings; UserProfile* profile = new UserProfile(name, prefs, info);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -