⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatcore_settings.cpp

📁 用qt4 编写的局域网聊天工具
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************** *   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 + -