📄 sharewidgetimpl.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 + -