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

📄 sharewidgetimpl.cpp

📁 张勇的linQ学习P2P及IM软件的极佳素材代码
💻 CPP
字号:
/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   copyright            : (C) 2003 by Zhang Yong                         *
 *   email                : z-yong163@163.com                              *
 ***************************************************************************/

#include <qlineedit.h>
#include <qfiledialog.h>
#include <qbuttongroup.h>
#include <qlistview.h>
#include <qpushbutton.h>
#include <qdom.h>
#include "sharewidgetimpl.h"
#include "recptwidget.h"
#include "plugin.h"


static QString readString(const QDomElement &parent, const char *tag)
{
	return parent.elementsByTagName(tag).item(0).toElement().text();
}

static void writeString(QDomDocument &doc, QDomElement &parent,
						const char *tag, const QString &value)
{
	QDomElement e = doc.createElement(tag);
	e.appendChild(doc.createTextNode(value));
	parent.appendChild(e);
}


Options::Options()
{
	accessMode = 0;
}

void Options::load(const QDomElement &pref)
{
	shareFolder = readString(pref, "share_folder");

	QString access = pref.attribute("access");
	if (access == "everybody")
		accessMode = ACCESS_ALL;
	else if (access == "contactlist")
		accessMode = ACCESS_CONTACT_LIST;
	else
		accessMode = ACCESS_MANUAL;

	accessList.clear();

	QDomElement e = pref.elementsByTagName("access_list").item(0).toElement();
	QDomNodeList acl = e.elementsByTagName("contact");

	int n = acl.count();
	for (int i = 0; i < n; i++) {
		QDomElement e = acl.item(i).toElement();
		if (!e.text().isEmpty())
			accessList.append(e.text());
	}
}

void Options::save(QDomDocument &doc, QDomElement &pref)
{
	writeString(doc, pref, "share_folder", shareFolder);

	QString access;
	if (accessMode == ACCESS_ALL)
		access = "everybody";
	else if (accessMode == ACCESS_CONTACT_LIST)
		access = "contactlist";
	else
		access = "accesslist";

	pref.setAttribute("access", access);

	QDomElement acl = doc.createElement("access_list");
	pref.appendChild(acl);

	QStringList::Iterator it;
	for (it = accessList.begin(); it != accessList.end(); ++it)
		writeString(doc, acl, "contact", *it);
}

int Options::getAccept(ContactList *cl, const char *contact)
{
	Contact *c;

	switch (accessMode) {
	case ACCESS_ALL:
		return ACCEPT_AUTO;

	case ACCESS_CONTACT_LIST:
		c = cl->getContact(contact);
		if (c && c->getType() == GROUP_CONTACTS)
			return ACCEPT_AUTO;
		break;

	case ACCESS_MANUAL:
		if (accessList.findIndex(contact) >= 0)
			return ACCEPT_AUTO;
		break;
	}

	return ACCEPT_REFUSE;
}


ShareWidget::ShareWidget(ContactList *cl, QWidget *parent)
	: ShareWidgetBase(parent)
{
	contactList = cl;
}

void ShareWidget::load(Options &ops)
{
	pathEdit->setText(ops.shareFolder);
	accessGroup->setButton(ops.accessMode);

	bool b = (ops.accessMode == ACCESS_MANUAL);
	accessListView->setEnabled(b);
	selectButton->setEnabled(b);

	setAccessList(ops.accessList);
}

void ShareWidget::save(Options &ops)
{
	ops.shareFolder = pathEdit->text().stripWhiteSpace();
	ops.accessMode = accessGroup->id(accessGroup->selected());

	getAccessList(ops.accessList);
}

void ShareWidget::getAccessList(QStringList &l)
{
	l.clear();
	for (QListViewItem *i = accessListView->firstChild(); i; i = i->nextSibling())
		l.append(i->text(0));
}

void ShareWidget::setAccessList(QStringList &l)
{
	QListViewItem *after = 0;

	accessListView->clear();

	QStringList::Iterator it = l.begin();
	for (it = l.begin(); it != l.end(); ++it) {
		after = new QListViewItem(accessListView, after);
		after->setText(0, *it);
		Contact *c = contactList->getContact(*it);
		if (c)
			after->setText(1, c->getDisplayName());
	}
}

void ShareWidget::slotBrowseFolder()
{
	QFileDialog dlg(pathEdit->text(), QString::null, this, 0, TRUE);
	dlg.setMode(QFileDialog::DirectoryOnly);
	if (dlg.exec() != QDialog::Accepted)
		return;

	pathEdit->setText(dlg.selectedFile());
}

void ShareWidget::slotSelect()
{
	QStringList acl;
	getAccessList(acl);

	if (RecptWidget::exec(contactList, acl, tr("Select Contacts"), this)
		!= QDialog::Accepted)
		return;

	setAccessList(acl);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -