migrate
This commit is contained in:
+62
-41
@@ -1,52 +1,73 @@
|
|||||||
# C++ objects and libs
|
# This file is used to ignore files which are generated
|
||||||
*.slo
|
# ----------------------------------------------------------------------------
|
||||||
*.lo
|
|
||||||
*.o
|
*~
|
||||||
|
*.autosave
|
||||||
*.a
|
*.a
|
||||||
*.la
|
*.core
|
||||||
*.lai
|
*.moc
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
*.orig
|
||||||
|
*.rej
|
||||||
*.so
|
*.so
|
||||||
*.so.*
|
*.so.*
|
||||||
*.dll
|
*_pch.h.cpp
|
||||||
*.dylib
|
*_resource.rc
|
||||||
|
*.qm
|
||||||
# Qt-es
|
.#*
|
||||||
object_script.*.Release
|
*.*#
|
||||||
object_script.*.Debug
|
core
|
||||||
*_plugin_import.cpp
|
!core/
|
||||||
|
tags
|
||||||
|
.DS_Store
|
||||||
|
.directory
|
||||||
|
*.debug
|
||||||
|
Makefile*
|
||||||
|
*.prl
|
||||||
|
*.app
|
||||||
|
moc_*.cpp
|
||||||
|
ui_*.h
|
||||||
|
qrc_*.cpp
|
||||||
|
Thumbs.db
|
||||||
|
*.res
|
||||||
|
*.rc
|
||||||
/.qmake.cache
|
/.qmake.cache
|
||||||
/.qmake.stash
|
/.qmake.stash
|
||||||
*.pro.user
|
|
||||||
*.pro.user.*
|
|
||||||
*.qbs.user
|
|
||||||
*.qbs.user.*
|
|
||||||
*.moc
|
|
||||||
moc_*.cpp
|
|
||||||
moc_*.h
|
|
||||||
qrc_*.cpp
|
|
||||||
ui_*.h
|
|
||||||
*.qmlc
|
|
||||||
*.jsc
|
|
||||||
Makefile*
|
|
||||||
*build-*
|
|
||||||
*.qm
|
|
||||||
*.prl
|
|
||||||
|
|
||||||
# Qt unit tests
|
# qtcreator generated files
|
||||||
target_wrapper.*
|
*.pro.user*
|
||||||
|
|
||||||
# QtCreator
|
# xemacs temporary files
|
||||||
*.autosave
|
*.flc
|
||||||
|
|
||||||
# QtCreator Qml
|
# Vim temporary files
|
||||||
*.qmlproject.user
|
.*.swp
|
||||||
*.qmlproject.user.*
|
|
||||||
|
|
||||||
# QtCreator CMake
|
# Visual Studio generated files
|
||||||
CMakeLists.txt.user*
|
*.ib_pdb_index
|
||||||
|
*.idb
|
||||||
|
*.ilk
|
||||||
|
*.pdb
|
||||||
|
*.sln
|
||||||
|
*.suo
|
||||||
|
*.vcproj
|
||||||
|
*vcproj.*.*.user
|
||||||
|
*.ncb
|
||||||
|
*.sdf
|
||||||
|
*.opensdf
|
||||||
|
*.vcxproj
|
||||||
|
*vcxproj.*
|
||||||
|
|
||||||
# QtCreator 4.8< compilation database
|
# MinGW generated files
|
||||||
compile_commands.json
|
*.Debug
|
||||||
|
*.Release
|
||||||
|
|
||||||
|
# Python byte code
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Binaries
|
||||||
|
# --------
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
|
||||||
# QtCreator local machine specific files for imported projects
|
|
||||||
*creator.user*
|
|
||||||
|
|||||||
+181
@@ -0,0 +1,181 @@
|
|||||||
|
#include "common.h"
|
||||||
|
#include "cdatabase.h"
|
||||||
|
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
|
||||||
|
cDatabase::cDatabase()
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
|
||||||
|
m_databaseType = settings.value("database/databasetype", "").toString();
|
||||||
|
m_hostName = settings.value("database/hostname", "").toString();
|
||||||
|
m_port = settings.value("database/port", "").toInt();
|
||||||
|
m_databaseName = settings.value("database/databaseName").toString();
|
||||||
|
m_userName = settings.value("database/username", "").toString();
|
||||||
|
m_password = settings.value("database/password").toString();
|
||||||
|
|
||||||
|
addTranslate("AUTOINCREMENT", "QMYSQL", "AUTO_INCREMENT");
|
||||||
|
addTranslate("AUTOINCREMENT", "QSQLITE", "AUTOINCREMENT");
|
||||||
|
}
|
||||||
|
|
||||||
|
cDatabase::~cDatabase()
|
||||||
|
{
|
||||||
|
if(m_db.isOpen())
|
||||||
|
m_db.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDatabase::addTranslate(const QString& sql, const QString& dbType, const QString& translated)
|
||||||
|
{
|
||||||
|
SQLTRANSLATE st = { sql, dbType, translated };
|
||||||
|
m_sqlTranslate.append(st);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cDatabase::translate(const QString& sql, const QString& dbType)
|
||||||
|
{
|
||||||
|
for(QList<SQLTRANSLATE>::iterator st = m_sqlTranslate.begin();st != m_sqlTranslate.end();st++)
|
||||||
|
{
|
||||||
|
if(st->sql == sql && st->dbType == dbType)
|
||||||
|
return(st->translated);
|
||||||
|
}
|
||||||
|
return(sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDatabase::connect()
|
||||||
|
{
|
||||||
|
m_db = QSqlDatabase::addDatabase(m_databaseType);
|
||||||
|
m_db.setHostName(m_hostName);
|
||||||
|
m_db.setPort(m_port);
|
||||||
|
m_db.setDatabaseName(m_databaseName);
|
||||||
|
m_db.setUserName(m_userName);
|
||||||
|
m_db.setPassword(m_password);
|
||||||
|
|
||||||
|
if(!m_db.open())
|
||||||
|
{
|
||||||
|
myDebug << m_db.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!checkDB())
|
||||||
|
{
|
||||||
|
myDebug << m_db.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
QSqlDatabase cDatabase::db()
|
||||||
|
{
|
||||||
|
return(m_db);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDatabase::checkDB()
|
||||||
|
{
|
||||||
|
QSqlQuery query(m_db);
|
||||||
|
if(!query.exec("SELECT version FROM config;"))
|
||||||
|
{
|
||||||
|
if(!createTables())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!query.exec("SELECT version FROM config;"))
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
query.first();
|
||||||
|
QString version = query.value("version").toString();
|
||||||
|
if(version.compare(APP_VERSION))
|
||||||
|
{
|
||||||
|
if(!upgradeDB(APP_VERSION))
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDatabase::createTables()
|
||||||
|
{
|
||||||
|
QSqlQuery query(m_db);
|
||||||
|
|
||||||
|
// CONFIG
|
||||||
|
if(!query.exec("CREATE TABLE config "
|
||||||
|
"( version VARCHAR(32) NOT NULL "
|
||||||
|
");"))
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!query.exec(QString("INSERT INTO config (version) VALUES ('%1');").arg(APP_VERSION)))
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// MANUFACTURER
|
||||||
|
if(!query.exec(QString("CREATE TABLE manufacturer "
|
||||||
|
"( id INTEGER PRIMARY KEY %1, "
|
||||||
|
" name VARCHAR(255) NOT NULL, "
|
||||||
|
" address VARCHAR(2000), "
|
||||||
|
" url VARCHAR(255), "
|
||||||
|
" email VARCHAR(255), "
|
||||||
|
" phone VARCHAR(255), "
|
||||||
|
" fax VARCHAR(255), "
|
||||||
|
" comment VARCHAR(2000) "
|
||||||
|
");").arg(translate("AUTOINCREMENT", m_databaseType))))
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// DISTRIBUTOR
|
||||||
|
if(!query.exec(QString("CREATE TABLE distributor "
|
||||||
|
"( id INTEGER PRIMARY KEY %1, "
|
||||||
|
" name VARCHAR(255) NOT NULL, "
|
||||||
|
" address VARCHAR(2000), "
|
||||||
|
" url VARCHAR(255), "
|
||||||
|
" email VARCHAR(255), "
|
||||||
|
" phone VARCHAR(255), "
|
||||||
|
" fax VARCHAR(255), "
|
||||||
|
" comment VARCHAR(2000) "
|
||||||
|
");").arg(translate("AUTOINCREMENT", m_databaseType))))
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// STORAGE_CATEGORY
|
||||||
|
if(!query.exec(QString("CREATE TABLE storage_category "
|
||||||
|
"( id INTEGER PRIMARY KEY %1, "
|
||||||
|
" parent INTEGER, "
|
||||||
|
" name VARCHAR(255) NOT NULL, "
|
||||||
|
" description VARCHAR(2000), "
|
||||||
|
" CONSTRAINT FK_storage_category_id FOREIGN KEY (parent) REFERENCES storage_category(id) "
|
||||||
|
");").arg(translate("AUTOINCREMENT", m_databaseType))))
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// STORAGE
|
||||||
|
if(!query.exec(QString("CREATE TABLE storage "
|
||||||
|
"( id INTEGER PRIMARY KEY %1, "
|
||||||
|
" storage_category_id INTEGER, "
|
||||||
|
" name VARCHAR(255) NOT NULL, "
|
||||||
|
" description VARCHAR(2000), "
|
||||||
|
" CONSTRAINT FK_storage_storage_category_id FOREIGN KEY (storage_category_id) REFERENCES storage_category(id) "
|
||||||
|
");").arg(translate("AUTOINCREMENT", m_databaseType))))
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDatabase::upgradeDB(const QString& /*version*/)
|
||||||
|
{
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
#ifndef CDATABASE_H
|
||||||
|
#define CDATABASE_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <QSqlDatabase>
|
||||||
|
#include <QSqlQuery>
|
||||||
|
#include <QSqlError>
|
||||||
|
#include <QList>
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSQLTRANSLATE
|
||||||
|
{
|
||||||
|
QString sql;
|
||||||
|
QString dbType;
|
||||||
|
QString translated;
|
||||||
|
} SQLTRANSLATE;
|
||||||
|
|
||||||
|
|
||||||
|
class cDatabase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
cDatabase();
|
||||||
|
~cDatabase();
|
||||||
|
|
||||||
|
bool connect();
|
||||||
|
|
||||||
|
QSqlDatabase db();
|
||||||
|
private:
|
||||||
|
QString m_databaseType;
|
||||||
|
QString m_hostName;
|
||||||
|
qint16 m_port;
|
||||||
|
QString m_databaseName;
|
||||||
|
QString m_userName;
|
||||||
|
QString m_password;
|
||||||
|
QSqlDatabase m_db;
|
||||||
|
|
||||||
|
QList<SQLTRANSLATE> m_sqlTranslate;
|
||||||
|
|
||||||
|
void addTranslate(const QString& sql, const QString& dbType, const QString& translated);
|
||||||
|
QString translate(const QString& sql, const QString& dbType);
|
||||||
|
|
||||||
|
bool checkDB();
|
||||||
|
bool createTables();
|
||||||
|
bool upgradeDB(const QString& version);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CDATABASE_H
|
||||||
@@ -0,0 +1,364 @@
|
|||||||
|
#include "cdistributor.h"
|
||||||
|
|
||||||
|
#include <QSqlQuery>
|
||||||
|
#include <QSqlError>
|
||||||
|
|
||||||
|
#include <QStandardItem>
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
|
||||||
|
cDistributor::cDistributor(cDatabase* db, qint32 id, QObject* parent) :
|
||||||
|
QObject(parent),
|
||||||
|
m_db(db),
|
||||||
|
m_changed(false),
|
||||||
|
m_id(id),
|
||||||
|
m_name(""),
|
||||||
|
m_address(""),
|
||||||
|
m_url(""),
|
||||||
|
m_email(""),
|
||||||
|
m_comment(""),
|
||||||
|
m_phone(""),
|
||||||
|
m_fax(""),
|
||||||
|
m_item(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
cDistributor::cDistributor(cDistributor* distributor)
|
||||||
|
{
|
||||||
|
set(distributor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributor::set(cDistributor* distributor)
|
||||||
|
{
|
||||||
|
m_db = distributor->db();
|
||||||
|
m_id = distributor->id();
|
||||||
|
m_name = distributor->name();
|
||||||
|
m_address = distributor->address();
|
||||||
|
m_url = distributor->url();
|
||||||
|
m_email = distributor->email();
|
||||||
|
m_comment = distributor->comment();
|
||||||
|
m_phone = distributor->phone();
|
||||||
|
m_fax = distributor->fax();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributor::setID(const qint32& id)
|
||||||
|
{
|
||||||
|
m_id = id;
|
||||||
|
m_changed = true;
|
||||||
|
emit idChanged(id);
|
||||||
|
emit distributorChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
qint32 cDistributor::id()
|
||||||
|
{
|
||||||
|
return(m_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributor::setName(const QString& name)
|
||||||
|
{
|
||||||
|
m_name = name;
|
||||||
|
m_changed = true;
|
||||||
|
emit nameChanged(name);
|
||||||
|
emit distributorChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cDistributor::name()
|
||||||
|
{
|
||||||
|
return(m_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributor::setAddress(const QString& address)
|
||||||
|
{
|
||||||
|
m_address = address;
|
||||||
|
emit addressChanged(address);
|
||||||
|
emit distributorChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cDistributor::address()
|
||||||
|
{
|
||||||
|
return(m_address);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributor::setURL(const QString& url)
|
||||||
|
{
|
||||||
|
m_url = url;
|
||||||
|
m_changed = true;
|
||||||
|
emit urlChanged(url);
|
||||||
|
emit distributorChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cDistributor::url()
|
||||||
|
{
|
||||||
|
return(m_url);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributor::setEmail(const QString& email)
|
||||||
|
{
|
||||||
|
m_email = email;
|
||||||
|
m_changed = true;
|
||||||
|
emit emailChanged(email);
|
||||||
|
emit distributorChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cDistributor::email()
|
||||||
|
{
|
||||||
|
return(m_email);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributor::setComment(const QString& comment)
|
||||||
|
{
|
||||||
|
m_comment = comment;
|
||||||
|
emit commentChanged(comment);
|
||||||
|
emit distributorChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cDistributor::comment()
|
||||||
|
{
|
||||||
|
return(m_comment);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributor::setPhone(const QString& phone)
|
||||||
|
{
|
||||||
|
m_phone = phone;
|
||||||
|
m_changed = true;
|
||||||
|
emit phoneChanged(phone);
|
||||||
|
emit distributorChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cDistributor::phone()
|
||||||
|
{
|
||||||
|
return(m_phone);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributor::setFax(const QString& fax)
|
||||||
|
{
|
||||||
|
m_fax = fax;
|
||||||
|
m_changed = true;
|
||||||
|
emit faxChanged(fax);
|
||||||
|
emit distributorChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cDistributor::fax()
|
||||||
|
{
|
||||||
|
return(m_fax);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributor::setItem(QStandardItem* item)
|
||||||
|
{
|
||||||
|
m_item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStandardItem* cDistributor::item()
|
||||||
|
{
|
||||||
|
return(m_item);
|
||||||
|
}
|
||||||
|
|
||||||
|
cDatabase* cDistributor::db()
|
||||||
|
{
|
||||||
|
return(m_db);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDistributor::save()
|
||||||
|
{
|
||||||
|
if(!m_changed)
|
||||||
|
return(true);
|
||||||
|
|
||||||
|
QSqlQuery query;
|
||||||
|
|
||||||
|
if(m_id == -1)
|
||||||
|
query.prepare("INSERT INTO distributor (name, address, url, email, comment, phone, fax) VALUES (:name, :address, :url, :email, :comment, :phone, :fax);");
|
||||||
|
else
|
||||||
|
query.prepare("UPDATE distributor SET name=:name, address=:address, url=:url, email=:email, comment=:comment, phone=:phone, fax=:fax WHERE id=:id;");
|
||||||
|
|
||||||
|
query.bindValue(":id", m_id);
|
||||||
|
query.bindValue(":name", m_name);
|
||||||
|
query.bindValue(":address", m_address);
|
||||||
|
query.bindValue(":url", m_url);
|
||||||
|
query.bindValue(":email", m_email);
|
||||||
|
query.bindValue(":comment", m_comment);
|
||||||
|
query.bindValue(":phone", m_phone);
|
||||||
|
query.bindValue(":fax", m_fax);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_id == -1)
|
||||||
|
{
|
||||||
|
if(!query.exec("SELECT MAX(id) MAXID FROM distributor;"))
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
query.first();
|
||||||
|
m_id = query.value("MAXID").toInt();
|
||||||
|
}
|
||||||
|
m_changed = false;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDistributor::remove()
|
||||||
|
{
|
||||||
|
QSqlQuery query;
|
||||||
|
|
||||||
|
query.prepare("DELETE FROM distributor WHERE id=:id;");
|
||||||
|
query.bindValue(":id", m_id);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributor::clearSave()
|
||||||
|
{
|
||||||
|
m_changed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cDistributorList::cDistributorList(cDatabase* db, QObject* parent) :
|
||||||
|
QObject(parent),
|
||||||
|
m_db(db)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDistributorList::load()
|
||||||
|
{
|
||||||
|
if(!m_db->db().isOpen())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
QString sql = QString("SELECT id, "
|
||||||
|
" name, "
|
||||||
|
" address, "
|
||||||
|
" url, "
|
||||||
|
" email, "
|
||||||
|
" comment, "
|
||||||
|
" phone, "
|
||||||
|
" fax "
|
||||||
|
"FROM distributor "
|
||||||
|
"ORDER BY name;");
|
||||||
|
QSqlQuery query(m_db->db());
|
||||||
|
|
||||||
|
query.prepare(sql);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
while(query.next())
|
||||||
|
{
|
||||||
|
cDistributor* lpDistributor = add(query.value("id").toInt());
|
||||||
|
lpDistributor->setName(query.value("name").toString());
|
||||||
|
lpDistributor->setAddress(query.value("address").toString());
|
||||||
|
lpDistributor->setURL(query.value("url").toString());
|
||||||
|
lpDistributor->setEmail(query.value("email").toString());
|
||||||
|
lpDistributor->setComment(query.value("comment").toString());
|
||||||
|
lpDistributor->setPhone(query.value("phone").toString());
|
||||||
|
lpDistributor->setFax(query.value("fax").toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cDistributor* cDistributorList::add(const qint32& id)
|
||||||
|
{
|
||||||
|
cDistributor* lpNew = find(id);
|
||||||
|
|
||||||
|
if(!lpNew)
|
||||||
|
{
|
||||||
|
lpNew = new cDistributor(m_db, id);
|
||||||
|
append(lpNew);
|
||||||
|
emit distributorAdded(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
cDistributor* cDistributorList::add(const QString& name)
|
||||||
|
{
|
||||||
|
cDistributor* lpNew = new cDistributor(m_db);
|
||||||
|
lpNew->setName(name);
|
||||||
|
append(lpNew);
|
||||||
|
emit distributorAdded(lpNew);
|
||||||
|
|
||||||
|
return(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDistributorList::remove(const qint32& id)
|
||||||
|
{
|
||||||
|
cDistributor* manufacturer = find(id);
|
||||||
|
if(!manufacturer)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!manufacturer->remove())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!removeOne(manufacturer))
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
emit distributorRemoved(manufacturer);
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cDistributor* cDistributorList::find(const qint32& id)
|
||||||
|
{
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(at(i)->id() == id)
|
||||||
|
return(at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
return(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
cDistributor* cDistributorList::find(const QString& name)
|
||||||
|
{
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(at(i)->name() == name)
|
||||||
|
return(at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
return(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDistributorList::fillList(QStandardItemModel* model)
|
||||||
|
{
|
||||||
|
model->clear();
|
||||||
|
|
||||||
|
if(!count())
|
||||||
|
return(true);
|
||||||
|
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
QStandardItem* item = new QStandardItem;
|
||||||
|
at(i)->setItem(item);
|
||||||
|
item->setText(at(i)->name());
|
||||||
|
item->setData(QVariant::fromValue(at(i)), ITEM_DISTRIBUTOR_DATA);
|
||||||
|
model->appendRow(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cDistributorList::save()
|
||||||
|
{
|
||||||
|
bool ret = true;
|
||||||
|
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(!at(i)->save())
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
+108
@@ -0,0 +1,108 @@
|
|||||||
|
#ifndef CDISTRIBUTOR_H
|
||||||
|
#define CDISTRIBUTOR_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "cdatabase.h"
|
||||||
|
|
||||||
|
#include <QMetaType>
|
||||||
|
#include <QList>
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include <QStandardItem>
|
||||||
|
#include <QStandardItemModel>
|
||||||
|
|
||||||
|
|
||||||
|
class cDistributor : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit cDistributor(cDatabase* db, qint32 id = -1, QObject* parent = nullptr);
|
||||||
|
cDistributor(cDistributor* distributor);
|
||||||
|
|
||||||
|
void set(cDistributor* distributor);
|
||||||
|
|
||||||
|
void setID(const qint32& id);
|
||||||
|
qint32 id();
|
||||||
|
|
||||||
|
void setName(const QString& name);
|
||||||
|
QString name();
|
||||||
|
|
||||||
|
void setAddress(const QString& address);
|
||||||
|
QString address();
|
||||||
|
|
||||||
|
void setURL(const QString& url);
|
||||||
|
QString url();
|
||||||
|
|
||||||
|
void setEmail(const QString& email);
|
||||||
|
QString email();
|
||||||
|
|
||||||
|
void setComment(const QString& comment);
|
||||||
|
QString comment();
|
||||||
|
|
||||||
|
void setPhone(const QString& phone);
|
||||||
|
QString phone();
|
||||||
|
|
||||||
|
void setFax(const QString& fax);
|
||||||
|
QString fax();
|
||||||
|
|
||||||
|
void setItem(QStandardItem* item);
|
||||||
|
QStandardItem* item();
|
||||||
|
|
||||||
|
bool save();
|
||||||
|
void clearSave();
|
||||||
|
bool remove();
|
||||||
|
|
||||||
|
cDatabase* db();
|
||||||
|
private:
|
||||||
|
cDatabase* m_db;
|
||||||
|
bool m_changed;
|
||||||
|
qint32 m_id;
|
||||||
|
QString m_name;
|
||||||
|
QString m_address;
|
||||||
|
QString m_url;
|
||||||
|
QString m_email;
|
||||||
|
QString m_comment;
|
||||||
|
QString m_phone;
|
||||||
|
QString m_fax;
|
||||||
|
QStandardItem* m_item;
|
||||||
|
signals:
|
||||||
|
void distributorChanged(cDistributor* distributor);
|
||||||
|
void idChanged(const qint32& id);
|
||||||
|
void nameChanged(const QString& name);
|
||||||
|
void addressChanged(const QString& address);
|
||||||
|
void urlChanged(const QString& url);
|
||||||
|
void emailChanged(const QString& email);
|
||||||
|
void commentChanged(const QString& comment);
|
||||||
|
void phoneChanged(const QString& phone);
|
||||||
|
void faxChanged(const QString& fax);
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(cDistributor*)
|
||||||
|
|
||||||
|
class cDistributorList : public QObject, public QList<cDistributor*>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
cDistributorList(cDatabase* db, QObject* parent = nullptr);
|
||||||
|
|
||||||
|
bool load();
|
||||||
|
cDistributor* add(const qint32& id);
|
||||||
|
cDistributor* add(const QString& name);
|
||||||
|
bool remove(const qint32& id);
|
||||||
|
cDistributor* find(const qint32& id);
|
||||||
|
cDistributor* find(const QString& name);
|
||||||
|
|
||||||
|
bool fillList(QStandardItemModel* model);
|
||||||
|
|
||||||
|
bool save();
|
||||||
|
private:
|
||||||
|
cDatabase* m_db;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void distributorAdded(cDistributor* manufacturer);
|
||||||
|
void distributorRemoved(cDistributor* manufacturer);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CDISTRIBUTOR_H
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
#include "cdistributorwindow.h"
|
||||||
|
#include "ui_cdistributorwindow.h"
|
||||||
|
|
||||||
|
#include "cmainwindow.h"
|
||||||
|
|
||||||
|
|
||||||
|
cDistributorWindow::cDistributorWindow(QWidget *parent) :
|
||||||
|
cMDISubWindow(parent),
|
||||||
|
ui(new Ui::cDistributorWindow),
|
||||||
|
m_distributor(nullptr)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
cDistributorWindow::~cDistributorWindow()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributorWindow::setDistributor(cDistributor* distributor)
|
||||||
|
{
|
||||||
|
m_distributor = distributor;
|
||||||
|
|
||||||
|
fillFields();
|
||||||
|
|
||||||
|
connect(ui->m_name, &QLineEdit::textChanged, this, &cDistributorWindow::onNameChanged);
|
||||||
|
connect(ui->m_address, &QPlainTextEdit::textChanged, this, &cDistributorWindow::onAddressChanged);
|
||||||
|
connect(ui->m_url, &QLineEdit::textChanged, this, &cDistributorWindow::onURLChanged);
|
||||||
|
connect(ui->m_email, &QLineEdit::textChanged, this, &cDistributorWindow::onEmailChanged);
|
||||||
|
connect(ui->m_phone, &QLineEdit::textChanged, this, &cDistributorWindow::onPhoneChanged);
|
||||||
|
connect(ui->m_fax, &QLineEdit::textChanged, this, &cDistributorWindow::onFaxChanged);
|
||||||
|
connect(ui->m_comment, &QPlainTextEdit::textChanged, this, &cDistributorWindow::onCommentChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
cDistributor* cDistributorWindow::distributor()
|
||||||
|
{
|
||||||
|
return(m_distributor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributorWindow::onDistributorChanged(cDistributor* distributor)
|
||||||
|
{
|
||||||
|
if(m_distributor != distributor)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fillFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributorWindow::onNameChanged(const QString& name)
|
||||||
|
{
|
||||||
|
m_distributor->setName(name);
|
||||||
|
|
||||||
|
if(m_distributor->item())
|
||||||
|
m_distributor->item()->setText(name);
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributorWindow::onAddressChanged()
|
||||||
|
{
|
||||||
|
m_distributor->setAddress(ui->m_address->toPlainText());
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributorWindow::onURLChanged(const QString& url)
|
||||||
|
{
|
||||||
|
m_distributor->setURL(url);
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributorWindow::onEmailChanged(const QString& email)
|
||||||
|
{
|
||||||
|
m_distributor->setEmail(email);
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributorWindow::onPhoneChanged(const QString& phone)
|
||||||
|
{
|
||||||
|
m_distributor->setPhone(phone);
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributorWindow::onFaxChanged(const QString& fax)
|
||||||
|
{
|
||||||
|
m_distributor->setFax(fax);
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributorWindow::onCommentChanged()
|
||||||
|
{
|
||||||
|
m_distributor->setComment(ui->m_comment->toPlainText());
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cDistributorWindow::fillFields()
|
||||||
|
{
|
||||||
|
ui->m_name->setText(m_distributor->name());
|
||||||
|
ui->m_address->setPlainText(m_distributor->address());
|
||||||
|
ui->m_url->setText(m_distributor->url());
|
||||||
|
ui->m_email->setText(m_distributor->email());
|
||||||
|
ui->m_phone->setText(m_distributor->phone());
|
||||||
|
ui->m_fax->setText(m_distributor->fax());
|
||||||
|
ui->m_comment->setPlainText(m_distributor->comment());
|
||||||
|
|
||||||
|
setWindowTitle("distributor - " + m_distributor->name());
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
#ifndef CDISTRIBUTORWINDOW_H
|
||||||
|
#define CDISTRIBUTORWINDOW_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "cdistributor.h"
|
||||||
|
|
||||||
|
#include "cmdisubwindow.h"
|
||||||
|
#include "cmainwindow.h"
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class cDistributorWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
class cDistributorWindow : public cMDISubWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit cDistributorWindow(QWidget *parent = nullptr);
|
||||||
|
~cDistributorWindow();
|
||||||
|
|
||||||
|
void setDistributor(cDistributor* distributor);
|
||||||
|
cDistributor* distributor();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::cDistributorWindow* ui;
|
||||||
|
cDistributor* m_distributor;
|
||||||
|
|
||||||
|
void fillFields();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void onDistributorChanged(cDistributor* distributor);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onNameChanged(const QString& szName);
|
||||||
|
void onAddressChanged();
|
||||||
|
void onURLChanged(const QString& szURL);
|
||||||
|
void onEmailChanged(const QString& szEmail);
|
||||||
|
void onPhoneChanged(const QString& szPhone);
|
||||||
|
void onFaxChanged(const QString& szFax);
|
||||||
|
void onCommentChanged();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void somethingChanged();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CDISTRIBUTORWINDOW_H
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>cDistributorWindow</class>
|
||||||
|
<widget class="QWidget" name="cDistributorWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Distributor - </string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Name:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="m_name"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Address:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QPlainTextEdit" name="m_address"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>URL:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLineEdit" name="m_url"/>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>Email:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QLineEdit" name="m_email"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Phone:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLineEdit" name="m_phone"/>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>Fax:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QLineEdit" name="m_fax"/>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="text">
|
||||||
|
<string>Comment:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="1">
|
||||||
|
<widget class="QPlainTextEdit" name="m_comment"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
+726
@@ -0,0 +1,726 @@
|
|||||||
|
#include "cmainwindow.h"
|
||||||
|
#include "ui_cmainwindow.h"
|
||||||
|
|
||||||
|
#include "cdatabase.h"
|
||||||
|
|
||||||
|
#include "cwidget.h"
|
||||||
|
#include "cmanufacturerwindow.h"
|
||||||
|
#include "cdistributorwindow.h"
|
||||||
|
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QInputDialog>
|
||||||
|
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
|
||||||
|
cMainWindow::cMainWindow(cSplashScreen* splashScreen, QWidget *parent)
|
||||||
|
: QMainWindow(parent),
|
||||||
|
ui(new Ui::cMainWindow),
|
||||||
|
m_somethingChanged(false),
|
||||||
|
m_splashScreen(splashScreen),
|
||||||
|
m_database(nullptr),
|
||||||
|
m_manufacturerList(nullptr),
|
||||||
|
m_distributorList(nullptr),
|
||||||
|
m_storageCategoryList(nullptr),
|
||||||
|
m_storageList(nullptr),
|
||||||
|
m_fileMenu(nullptr),
|
||||||
|
m_fileToolBar(nullptr),
|
||||||
|
m_fileQuitAction(nullptr),
|
||||||
|
m_listAdd(nullptr),
|
||||||
|
m_listEdit(nullptr),
|
||||||
|
m_listRemove(nullptr),
|
||||||
|
m_manufacturerListAddAction(nullptr),
|
||||||
|
m_manufacturerListEditAction(nullptr),
|
||||||
|
m_manufacturerListRemoveAction(nullptr),
|
||||||
|
m_distributorListAddAction(nullptr),
|
||||||
|
m_distributorListEditAction(nullptr),
|
||||||
|
m_distributorListRemoveAction(nullptr),
|
||||||
|
m_manufacturerListModel(nullptr),
|
||||||
|
m_distributorListModel(nullptr),
|
||||||
|
m_storageListModel(nullptr),
|
||||||
|
m_updatingTab(false)
|
||||||
|
{
|
||||||
|
initUI();
|
||||||
|
createActions();
|
||||||
|
|
||||||
|
loadData();
|
||||||
|
|
||||||
|
setListButtonState();
|
||||||
|
updateWindowTitle();
|
||||||
|
}
|
||||||
|
|
||||||
|
cMainWindow::~cMainWindow()
|
||||||
|
{
|
||||||
|
if(m_manufacturerList)
|
||||||
|
delete m_manufacturerList;
|
||||||
|
|
||||||
|
if(m_distributorList)
|
||||||
|
delete m_distributorList;
|
||||||
|
|
||||||
|
if(m_storageCategoryList)
|
||||||
|
delete m_storageCategoryList;
|
||||||
|
|
||||||
|
if(m_storageList)
|
||||||
|
delete m_storageList;
|
||||||
|
|
||||||
|
if(m_database)
|
||||||
|
delete m_database;
|
||||||
|
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::closeEvent(QCloseEvent *event)
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
settings.setValue("main/width", QVariant::fromValue(size().width()));
|
||||||
|
settings.setValue("main/height", QVariant::fromValue(size().height()));
|
||||||
|
settings.setValue("main/x", QVariant::fromValue(x()));
|
||||||
|
settings.setValue("main/y", QVariant::fromValue(y()));
|
||||||
|
if(this->isMaximized())
|
||||||
|
settings.setValue("main/maximized", QVariant::fromValue(true));
|
||||||
|
else
|
||||||
|
settings.setValue("main/maximized", QVariant::fromValue(false));
|
||||||
|
|
||||||
|
QList<qint32> sizes = ui->m_splitter->sizes();
|
||||||
|
|
||||||
|
for(int x = 0;x < sizes.count();x++)
|
||||||
|
settings.setValue(QString("main/splitter%1").arg(x+1), QVariant::fromValue(sizes[x]));
|
||||||
|
|
||||||
|
event->accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::initUI()
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
QIcon::setThemeName("TangoMFK");
|
||||||
|
|
||||||
|
QSettings settings;
|
||||||
|
|
||||||
|
if(!settings.value("main/maximized").toBool())
|
||||||
|
{
|
||||||
|
qint32 iX = settings.value("main/x", QVariant::fromValue(-1)).toInt();
|
||||||
|
qint32 iY = settings.value("main/y", QVariant::fromValue(-1)).toInt();
|
||||||
|
qint32 iWidth = settings.value("main/width", QVariant::fromValue(-1)).toInt();
|
||||||
|
qint32 iHeight = settings.value("main/height", QVariant::fromValue(-1)).toInt();
|
||||||
|
|
||||||
|
if(iWidth != -1 && iHeight != -1)
|
||||||
|
resize(iWidth, iHeight);
|
||||||
|
if(iX != -1 && iY != -1)
|
||||||
|
move(iX, iY);
|
||||||
|
}
|
||||||
|
|
||||||
|
qint32 iWidth1 = settings.value("main/splitter1", QVariant::fromValue(-1)).toInt();
|
||||||
|
qint32 iWidth2 = settings.value("main/splitter2", QVariant::fromValue(-1)).toInt();
|
||||||
|
qint32 iWidth3 = settings.value("main/splitter3", QVariant::fromValue(-1)).toInt();
|
||||||
|
|
||||||
|
ui->m_splitter->setSizes(QList<int>() << iWidth1 << iWidth2 << iWidth3);
|
||||||
|
|
||||||
|
m_manufacturerListModel = new QStandardItemModel(0, 1);
|
||||||
|
ui->m_manufacturerList->setModel(m_manufacturerListModel);
|
||||||
|
|
||||||
|
m_distributorListModel = new QStandardItemModel(0, 1);
|
||||||
|
ui->m_distributorList->setModel(m_distributorListModel);
|
||||||
|
|
||||||
|
m_storageListModel = new QStandardItemModel(0, 1);
|
||||||
|
ui->m_storageList->setModel(m_storageListModel);
|
||||||
|
|
||||||
|
ui->m_toolBox->setCurrentIndex(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::createActions()
|
||||||
|
{
|
||||||
|
setToolButtonStyle(Qt::ToolButtonFollowStyle);
|
||||||
|
createFileActions();
|
||||||
|
|
||||||
|
const QIcon addIcon = QIcon::fromTheme("list-add");
|
||||||
|
m_listAdd = new QAction(addIcon, "add", this);
|
||||||
|
ui->m_listAdd->setDefaultAction(m_listAdd);
|
||||||
|
connect(m_listAdd, &QAction::triggered, this, &cMainWindow::onListAdd);
|
||||||
|
|
||||||
|
const QIcon editIcon = QIcon::fromTheme("accessories-text-editor");
|
||||||
|
m_listEdit = new QAction(editIcon, "edit", this);
|
||||||
|
ui->m_listEdit->setDefaultAction(m_listEdit);
|
||||||
|
connect(m_listEdit, &QAction::triggered, this, &cMainWindow::onListEdit);
|
||||||
|
|
||||||
|
const QIcon removeIcon = QIcon::fromTheme("list-remove");
|
||||||
|
m_listRemove = new QAction(removeIcon, "remove", this);
|
||||||
|
ui->m_listRemove->setDefaultAction(m_listRemove);
|
||||||
|
connect(m_listRemove, &QAction::triggered, this, &cMainWindow::onListRemove);
|
||||||
|
|
||||||
|
connect(ui->m_toolBox, &QToolBox::currentChanged, this, &cMainWindow::onToolBoxCurrentChanged);
|
||||||
|
|
||||||
|
connect(ui->m_manufacturerList, &QTreeView::clicked, this, &cMainWindow::onManufacturerListClicked);
|
||||||
|
connect(ui->m_manufacturerList, &QTreeView::doubleClicked, this, &cMainWindow::onManufacturerListDoubleClicked);
|
||||||
|
connect(m_manufacturerListModel, &QStandardItemModel::itemChanged, this, &cMainWindow::onManufacturerListNameChanged);
|
||||||
|
connect(ui->m_manufacturerList, &QTreeView::customContextMenuRequested, this, &cMainWindow::onManufacturerListContextMenu);
|
||||||
|
|
||||||
|
connect(ui->m_distributorList, &QTreeView::clicked, this, &cMainWindow::onDistributorListClicked);
|
||||||
|
connect(ui->m_distributorList, &QTreeView::doubleClicked, this, &cMainWindow::onDistributorListDoubleClicked);
|
||||||
|
connect(m_distributorListModel, &QStandardItemModel::itemChanged, this, &cMainWindow::onDistributorListNameChanged);
|
||||||
|
connect(ui->m_distributorList, &QTreeView::customContextMenuRequested, this, &cMainWindow::onDistributorListContextMenu);
|
||||||
|
|
||||||
|
connect(ui->m_mainTab, &QTabWidget::currentChanged, this, &cMainWindow::onMainTabCurrentChanged);
|
||||||
|
connect(ui->m_mainTab, &QTabWidget::tabCloseRequested, this, &cMainWindow::onMainTabTabCloseRequested);
|
||||||
|
connect(ui->m_mdiArea, &QMdiArea::subWindowActivated, this, &cMainWindow::onMdiAreaSubWindowActivated);
|
||||||
|
|
||||||
|
createContextActions();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::createContextActions()
|
||||||
|
{
|
||||||
|
m_manufacturerListAddAction = new QAction(tr("add..."), this);
|
||||||
|
connect(m_manufacturerListAddAction, &QAction::triggered, this, &cMainWindow::onManufacturerListAddClicked);
|
||||||
|
|
||||||
|
m_manufacturerListEditAction = new QAction(tr("edit..."), this);
|
||||||
|
connect(m_manufacturerListEditAction, &QAction::triggered, this, &cMainWindow::onManufacturerListEditClicked);
|
||||||
|
|
||||||
|
m_manufacturerListRemoveAction = new QAction(tr("remove..."), this);
|
||||||
|
connect(m_manufacturerListRemoveAction, &QAction::triggered, this, &cMainWindow::onManufacturerListRemoveClicked);
|
||||||
|
|
||||||
|
m_distributorListAddAction = new QAction(tr("add..."), this);
|
||||||
|
connect(m_distributorListAddAction, &QAction::triggered, this, &cMainWindow::onDistributorListAddClicked);
|
||||||
|
|
||||||
|
m_distributorListEditAction = new QAction(tr("edit..."), this);
|
||||||
|
connect(m_distributorListEditAction, &QAction::triggered, this, &cMainWindow::onDistributorListEditClicked);
|
||||||
|
|
||||||
|
m_distributorListRemoveAction = new QAction(tr("remove..."), this);
|
||||||
|
connect(m_distributorListRemoveAction, &QAction::triggered, this, &cMainWindow::onDistributorListRemoveClicked);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::createFileActions()
|
||||||
|
{
|
||||||
|
m_fileMenu = menuBar()->addMenu(tr("&File"));
|
||||||
|
m_fileToolBar = addToolBar(tr("File Actions"));
|
||||||
|
|
||||||
|
m_fileSaveAction = m_fileMenu->addAction(tr("&Save"), this, &cMainWindow::onFileSave);
|
||||||
|
m_fileSaveAction->setShortcut(Qt::CTRL | Qt::Key_S);
|
||||||
|
|
||||||
|
m_fileMenu->addSeparator();
|
||||||
|
|
||||||
|
m_fileQuitAction = m_fileMenu->addAction(tr("&Quit"), this, &QWidget::close);
|
||||||
|
m_fileQuitAction->setShortcut(Qt::CTRL | Qt::Key_Q);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::loadData()
|
||||||
|
{
|
||||||
|
m_database = new cDatabase();
|
||||||
|
m_database->connect();
|
||||||
|
|
||||||
|
m_manufacturerList = new cManufacturerList(m_database);
|
||||||
|
m_manufacturerList->load();
|
||||||
|
m_manufacturerList->fillList(m_manufacturerListModel);
|
||||||
|
|
||||||
|
m_distributorList = new cDistributorList(m_database);
|
||||||
|
m_distributorList->load();
|
||||||
|
m_distributorList->fillList(m_distributorListModel);
|
||||||
|
|
||||||
|
m_storageCategoryList = new cStorageCategoryList(m_database);
|
||||||
|
m_storageCategoryList->load();
|
||||||
|
m_storageCategoryList->fillList(m_storageListModel);
|
||||||
|
|
||||||
|
m_storageList = new cStorageList(m_database, m_storageCategoryList);
|
||||||
|
m_storageList->load();
|
||||||
|
m_storageList->fillList();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::setListButtonState()
|
||||||
|
{
|
||||||
|
switch(activeTab())
|
||||||
|
{
|
||||||
|
case TAB_MANUFACTURER_LIST:
|
||||||
|
if(ui->m_manufacturerList->selectionModel()->selectedRows().count())
|
||||||
|
{
|
||||||
|
m_listEdit->setEnabled(true);
|
||||||
|
m_listRemove->setEnabled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_listEdit->setEnabled(false);
|
||||||
|
m_listRemove->setEnabled(false);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TAB_DISTRIBUTOR_LIST:
|
||||||
|
if(ui->m_distributorList->selectionModel()->selectedRows().count())
|
||||||
|
{
|
||||||
|
m_listEdit->setEnabled(true);
|
||||||
|
m_listRemove->setEnabled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_listEdit->setEnabled(false);
|
||||||
|
m_listRemove->setEnabled(false);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TAB_PART_LIST:
|
||||||
|
{
|
||||||
|
m_listEdit->setEnabled(false);
|
||||||
|
m_listRemove->setEnabled(false);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TAB_PROJECT_LIST:
|
||||||
|
{
|
||||||
|
m_listEdit->setEnabled(false);
|
||||||
|
m_listRemove->setEnabled(false);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_listAdd->setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onFileSave()
|
||||||
|
{
|
||||||
|
if(m_manufacturerList->save())
|
||||||
|
{
|
||||||
|
m_somethingChanged = false;
|
||||||
|
updateWindowTitle();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_distributorList->save())
|
||||||
|
{
|
||||||
|
m_somethingChanged = false;
|
||||||
|
updateWindowTitle();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_storageList->save())
|
||||||
|
{
|
||||||
|
m_somethingChanged = false;
|
||||||
|
updateWindowTitle();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_storageCategoryList->save())
|
||||||
|
{
|
||||||
|
m_somethingChanged = false;
|
||||||
|
updateWindowTitle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onSomethingChanged()
|
||||||
|
{
|
||||||
|
if(!m_somethingChanged)
|
||||||
|
{
|
||||||
|
m_somethingChanged = true;
|
||||||
|
updateWindowTitle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onToolBoxCurrentChanged(int /*index*/)
|
||||||
|
{
|
||||||
|
setListButtonState();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onMainTabCurrentChanged(int /*index*/)
|
||||||
|
{
|
||||||
|
if(m_updatingTab)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_updatingTab = true;
|
||||||
|
cWidget* lpWidget = static_cast<cWidget*>(ui->m_mainTab->currentWidget());
|
||||||
|
QMdiSubWindow* lpWindow = lpWidget->window();
|
||||||
|
ui->m_mdiArea->setActiveSubWindow(lpWindow);
|
||||||
|
m_updatingTab = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onMainTabTabCloseRequested(int index)
|
||||||
|
{
|
||||||
|
if(m_updatingTab)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_updatingTab = true;
|
||||||
|
// disconnectTextEdit();
|
||||||
|
// m_lpOldTextEdit = nullptr;
|
||||||
|
cWidget* lpWidget = static_cast<cWidget*>(ui->m_mainTab->currentWidget());
|
||||||
|
QMdiSubWindow* lpWindow = lpWidget->window();
|
||||||
|
ui->m_mainTab->removeTab(index);
|
||||||
|
ui->m_mdiArea->removeSubWindow(lpWindow);
|
||||||
|
delete(lpWidget);
|
||||||
|
m_updatingTab = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onMdiAreaSubWindowActivated(QMdiSubWindow *arg1)
|
||||||
|
{
|
||||||
|
if(m_updatingTab)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_updatingTab = true;
|
||||||
|
|
||||||
|
for(int x = 0;x < ui->m_mainTab->count();x++)
|
||||||
|
{
|
||||||
|
cWidget* lpWidget = static_cast<cWidget*>(ui->m_mainTab->widget(x));
|
||||||
|
if(lpWidget->window() == arg1)
|
||||||
|
{
|
||||||
|
ui->m_mainTab->setCurrentIndex(x);
|
||||||
|
m_updatingTab = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_updatingTab = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onSubWindowClosed(QWidget* lpSubWindow)
|
||||||
|
{
|
||||||
|
if(m_updatingTab)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_updatingTab = true;
|
||||||
|
// disconnectTextEdit();
|
||||||
|
// m_lpOldTextEdit = nullptr;
|
||||||
|
|
||||||
|
for(int x = 0;x < ui->m_mainTab->count();x++)
|
||||||
|
{
|
||||||
|
cWidget* lpWidget = static_cast<cWidget*>(ui->m_mainTab->widget(x));
|
||||||
|
if(lpWidget->widget() == lpSubWindow)
|
||||||
|
{
|
||||||
|
ui->m_mainTab->removeTab(x);
|
||||||
|
m_updatingTab = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_updatingTab = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onManufacturerListClicked(const QModelIndex& /*index*/)
|
||||||
|
{
|
||||||
|
setListButtonState();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onManufacturerListDoubleClicked(const QModelIndex& /*index*/)
|
||||||
|
{
|
||||||
|
editManufacturer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onManufacturerListContextMenu(const QPoint& pos)
|
||||||
|
{
|
||||||
|
QMenu* menu = new QMenu(this);
|
||||||
|
|
||||||
|
menu->addAction(m_manufacturerListAddAction);
|
||||||
|
|
||||||
|
QStandardItem* item = nullptr;
|
||||||
|
|
||||||
|
if(ui->m_manufacturerList->selectionModel()->selectedRows().count())
|
||||||
|
item = m_manufacturerListModel->itemFromIndex(ui->m_manufacturerList->currentIndex());
|
||||||
|
if(item)
|
||||||
|
{
|
||||||
|
menu->addAction(m_manufacturerListEditAction);
|
||||||
|
menu->addAction(m_manufacturerListRemoveAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu->exec(ui->m_manufacturerList->mapToGlobal(pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onManufacturerListNameChanged(QStandardItem* item)
|
||||||
|
{
|
||||||
|
cManufacturer* manufacturer = item->data(ITEM_MANUFACTURER_DATA).value<cManufacturer*>();
|
||||||
|
QString name = item->text();
|
||||||
|
|
||||||
|
if(name.isEmpty())
|
||||||
|
{
|
||||||
|
item->setText(manufacturer->name());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(name != manufacturer->name())
|
||||||
|
{
|
||||||
|
onSomethingChanged();
|
||||||
|
manufacturer->setName(name);
|
||||||
|
emit manufacturerNameChanged(manufacturer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onDistributorListClicked(const QModelIndex& /*index*/)
|
||||||
|
{
|
||||||
|
setListButtonState();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onDistributorListDoubleClicked(const QModelIndex& /*index*/)
|
||||||
|
{
|
||||||
|
editDistributor();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onDistributorListContextMenu(const QPoint& pos)
|
||||||
|
{
|
||||||
|
QMenu* menu = new QMenu(this);
|
||||||
|
|
||||||
|
menu->addAction(m_distributorListAddAction);
|
||||||
|
|
||||||
|
QStandardItem* item = nullptr;
|
||||||
|
|
||||||
|
if(ui->m_distributorList->selectionModel()->selectedRows().count())
|
||||||
|
item = m_distributorListModel->itemFromIndex(ui->m_distributorList->currentIndex());
|
||||||
|
if(item)
|
||||||
|
{
|
||||||
|
menu->addAction(m_distributorListEditAction);
|
||||||
|
menu->addAction(m_distributorListRemoveAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu->exec(ui->m_distributorList->mapToGlobal(pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onDistributorListNameChanged(QStandardItem* item)
|
||||||
|
{
|
||||||
|
cDistributor* distributor = item->data(ITEM_DISTRIBUTOR_DATA).value<cDistributor*>();
|
||||||
|
QString name = item->text();
|
||||||
|
|
||||||
|
if(name.isEmpty())
|
||||||
|
{
|
||||||
|
item->setText(distributor->name());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(name != distributor->name())
|
||||||
|
{
|
||||||
|
onSomethingChanged();
|
||||||
|
distributor->setName(name);
|
||||||
|
emit distributorNameChanged(distributor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onListAdd()
|
||||||
|
{
|
||||||
|
switch(activeTab())
|
||||||
|
{
|
||||||
|
case TAB_MANUFACTURER_LIST:
|
||||||
|
addManufacturer();
|
||||||
|
break;
|
||||||
|
case TAB_DISTRIBUTOR_LIST:
|
||||||
|
addDistributor();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onListEdit()
|
||||||
|
{
|
||||||
|
switch(activeTab())
|
||||||
|
{
|
||||||
|
case TAB_MANUFACTURER_LIST:
|
||||||
|
editManufacturer();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch(activeTab())
|
||||||
|
{
|
||||||
|
case TAB_DISTRIBUTOR_LIST:
|
||||||
|
editDistributor();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onListRemove()
|
||||||
|
{
|
||||||
|
switch(activeTab())
|
||||||
|
{
|
||||||
|
case TAB_MANUFACTURER_LIST:
|
||||||
|
removeManufacturer();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch(activeTab())
|
||||||
|
{
|
||||||
|
case TAB_DISTRIBUTOR_LIST:
|
||||||
|
removeDistributor();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onManufacturerListAddClicked()
|
||||||
|
{
|
||||||
|
addManufacturer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onManufacturerListEditClicked()
|
||||||
|
{
|
||||||
|
editManufacturer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onManufacturerListRemoveClicked()
|
||||||
|
{
|
||||||
|
removeManufacturer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onDistributorListAddClicked()
|
||||||
|
{
|
||||||
|
addDistributor();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onDistributorListEditClicked()
|
||||||
|
{
|
||||||
|
editDistributor();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::onDistributorListRemoveClicked()
|
||||||
|
{
|
||||||
|
removeDistributor();
|
||||||
|
}
|
||||||
|
|
||||||
|
qint16 cMainWindow::activeTab()
|
||||||
|
{
|
||||||
|
QWidget* widget = ui->m_toolBox->currentWidget();
|
||||||
|
|
||||||
|
if(widget == ui->m_manufacturerListTab)
|
||||||
|
return(TAB_MANUFACTURER_LIST);
|
||||||
|
else if(widget == ui->m_distributorListTab)
|
||||||
|
return(TAB_DISTRIBUTOR_LIST);
|
||||||
|
else if(widget == ui->m_partListTab)
|
||||||
|
return(TAB_PART_LIST);
|
||||||
|
else if(widget == ui->m_projectListTab)
|
||||||
|
return(TAB_PROJECT_LIST);
|
||||||
|
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::updateWindowTitle()
|
||||||
|
{
|
||||||
|
QString windowTitle = "";
|
||||||
|
|
||||||
|
if(m_somethingChanged)
|
||||||
|
windowTitle = "unsaved";
|
||||||
|
|
||||||
|
m_fileSaveAction->setEnabled(m_somethingChanged);
|
||||||
|
|
||||||
|
setWindowTitle(windowTitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::addManufacturer()
|
||||||
|
{
|
||||||
|
bool ok;
|
||||||
|
QString name = QInputDialog::getText(this, tr("New Manufacturer"), tr("Name:"), QLineEdit::Normal, "", &ok);
|
||||||
|
if(!ok)
|
||||||
|
return;
|
||||||
|
|
||||||
|
cManufacturer* manufacturer = m_manufacturerList->add(name);
|
||||||
|
|
||||||
|
QStandardItem* item = new QStandardItem(name);
|
||||||
|
item->setData(QVariant::fromValue(manufacturer), ITEM_MANUFACTURER_DATA);
|
||||||
|
m_manufacturerListModel->appendRow(item);
|
||||||
|
m_manufacturerListModel->sort(Qt::AscendingOrder | Qt::CaseInsensitive);
|
||||||
|
|
||||||
|
onSomethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::editManufacturer()
|
||||||
|
{
|
||||||
|
if(!ui->m_manufacturerList->selectionModel()->selectedIndexes().count())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QModelIndex index = ui->m_manufacturerList->selectionModel()->selectedIndexes()[0];
|
||||||
|
QStandardItem* item = m_manufacturerListModel->itemFromIndex(index);
|
||||||
|
cManufacturer* manufacturer = item->data(ITEM_MANUFACTURER_DATA).value<cManufacturer*>();
|
||||||
|
|
||||||
|
for(int x = 0;x < ui->m_mainTab->count();x++)
|
||||||
|
{
|
||||||
|
cWidget* widget = static_cast<cWidget*>(ui->m_mainTab->widget(x));
|
||||||
|
if(widget->type() == cWidget::TYPE_manufacturer)
|
||||||
|
{
|
||||||
|
cManufacturerWindow* manufacturerWindow = static_cast<cManufacturerWindow*>(widget->widget());
|
||||||
|
if(manufacturerWindow->manufacturer() == manufacturer)
|
||||||
|
{
|
||||||
|
ui->m_mainTab->setCurrentIndex(x);
|
||||||
|
ui->m_mdiArea->setActiveSubWindow(widget->window());
|
||||||
|
m_updatingTab = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cManufacturerWindow* manufacturerWindow = new cManufacturerWindow(this);
|
||||||
|
manufacturerWindow->setManufacturer(manufacturer);
|
||||||
|
cWidget* widget1 = new cWidget(manufacturerWindow);
|
||||||
|
widget1->setWindow(ui->m_mdiArea->addSubWindow(manufacturerWindow));
|
||||||
|
ui->m_mainTab->addTab(static_cast<QWidget*>(widget1), manufacturerWindow->windowTitle());
|
||||||
|
manufacturerWindow->show();
|
||||||
|
|
||||||
|
connect(manufacturerWindow, &cManufacturerWindow::somethingChanged, this, &cMainWindow::onSomethingChanged);
|
||||||
|
connect(this, &cMainWindow::manufacturerNameChanged, manufacturerWindow, &cManufacturerWindow::onManufacturerChanged);
|
||||||
|
connect(manufacturerWindow, &cManufacturerWindow::subWindowClosed, this, &cMainWindow::onSubWindowClosed);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::removeManufacturer()
|
||||||
|
{
|
||||||
|
if(!ui->m_manufacturerList->selectionModel()->selectedIndexes().count())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QModelIndex index = ui->m_manufacturerList->selectionModel()->selectedIndexes()[0];
|
||||||
|
QStandardItem* item = m_manufacturerListModel->itemFromIndex(index);
|
||||||
|
cManufacturer* manufacturer = item->data(ITEM_MANUFACTURER_DATA).value<cManufacturer*>();
|
||||||
|
|
||||||
|
if(QMessageBox::question(this, tr("Remove Manufacturer"), QString(tr("Are you sure you want to remove \"%1\"?")).arg(manufacturer->name())) == QMessageBox::No)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(!manufacturer->remove())
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_manufacturerListModel->removeRow(index.row());
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::addDistributor()
|
||||||
|
{
|
||||||
|
bool ok;
|
||||||
|
QString name = QInputDialog::getText(this, tr("New Distributor"), tr("Name:"), QLineEdit::Normal, "", &ok);
|
||||||
|
if(!ok)
|
||||||
|
return;
|
||||||
|
|
||||||
|
cDistributor* distributor = m_distributorList->add(name);
|
||||||
|
|
||||||
|
QStandardItem* item = new QStandardItem(name);
|
||||||
|
item->setData(QVariant::fromValue(distributor), ITEM_DISTRIBUTOR_DATA);
|
||||||
|
m_distributorListModel->appendRow(item);
|
||||||
|
m_distributorListModel->sort(Qt::AscendingOrder | Qt::CaseInsensitive);
|
||||||
|
|
||||||
|
onSomethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::editDistributor()
|
||||||
|
{
|
||||||
|
if(!ui->m_distributorList->selectionModel()->selectedIndexes().count())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QModelIndex index = ui->m_distributorList->selectionModel()->selectedIndexes()[0];
|
||||||
|
QStandardItem* item = m_distributorListModel->itemFromIndex(index);
|
||||||
|
cDistributor* distributor = item->data(ITEM_DISTRIBUTOR_DATA).value<cDistributor*>();
|
||||||
|
|
||||||
|
for(int x = 0;x < ui->m_mainTab->count();x++)
|
||||||
|
{
|
||||||
|
cWidget* widget = static_cast<cWidget*>(ui->m_mainTab->widget(x));
|
||||||
|
if(widget->type() == cWidget::TYPE_distributor)
|
||||||
|
{
|
||||||
|
cDistributorWindow* distributorWindow = static_cast<cDistributorWindow*>(widget->widget());
|
||||||
|
if(distributorWindow->distributor() == distributor)
|
||||||
|
{
|
||||||
|
ui->m_mainTab->setCurrentIndex(x);
|
||||||
|
ui->m_mdiArea->setActiveSubWindow(widget->window());
|
||||||
|
m_updatingTab = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cDistributorWindow* distributorWindow = new cDistributorWindow(this);
|
||||||
|
distributorWindow->setDistributor(distributor);
|
||||||
|
cWidget* widget1 = new cWidget(distributorWindow);
|
||||||
|
widget1->setWindow(ui->m_mdiArea->addSubWindow(distributorWindow));
|
||||||
|
ui->m_mainTab->addTab(static_cast<QWidget*>(widget1), distributorWindow->windowTitle());
|
||||||
|
distributorWindow->show();
|
||||||
|
|
||||||
|
connect(distributorWindow, &cDistributorWindow::somethingChanged, this, &cMainWindow::onSomethingChanged);
|
||||||
|
connect(this, &cMainWindow::distributorNameChanged, distributorWindow, &cDistributorWindow::onDistributorChanged);
|
||||||
|
connect(distributorWindow, &cDistributorWindow::subWindowClosed, this, &cMainWindow::onSubWindowClosed);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMainWindow::removeDistributor()
|
||||||
|
{
|
||||||
|
if(!ui->m_distributorList->selectionModel()->selectedIndexes().count())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QModelIndex index = ui->m_distributorList->selectionModel()->selectedIndexes()[0];
|
||||||
|
QStandardItem* item = m_distributorListModel->itemFromIndex(index);
|
||||||
|
cDistributor* distributor = item->data(ITEM_DISTRIBUTOR_DATA).value<cDistributor*>();
|
||||||
|
|
||||||
|
if(QMessageBox::question(this, tr("Remove distributor"), QString(tr("Are you sure you want to remove \"%1\"?")).arg(distributor->name())) == QMessageBox::No)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(!distributor->remove())
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_distributorListModel->removeRow(index.row());
|
||||||
|
}
|
||||||
+130
@@ -0,0 +1,130 @@
|
|||||||
|
#ifndef CMAINWINDOW_H
|
||||||
|
#define CMAINWINDOW_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "csplashscreen.h"
|
||||||
|
|
||||||
|
#include "cdatabase.h"
|
||||||
|
#include "cmanufacturer.h"
|
||||||
|
#include "cdistributor.h"
|
||||||
|
#include "cstoragecategory.h"
|
||||||
|
#include "cstorage.h"
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <QCloseEvent>
|
||||||
|
#include <QStandardItemModel>
|
||||||
|
#include <QMdiSubWindow>
|
||||||
|
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
namespace Ui { class cMainWindow; }
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class cMainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
cMainWindow(cSplashScreen* splashScreen, QWidget *parent = nullptr);
|
||||||
|
~cMainWindow();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::cMainWindow* ui;
|
||||||
|
|
||||||
|
bool m_somethingChanged;
|
||||||
|
|
||||||
|
cSplashScreen* m_splashScreen;
|
||||||
|
cDatabase* m_database;
|
||||||
|
cManufacturerList* m_manufacturerList;
|
||||||
|
cDistributorList* m_distributorList;
|
||||||
|
cStorageCategoryList* m_storageCategoryList;
|
||||||
|
cStorageList* m_storageList;
|
||||||
|
|
||||||
|
QMenu* m_fileMenu;
|
||||||
|
|
||||||
|
QToolBar* m_fileToolBar;
|
||||||
|
|
||||||
|
QAction* m_fileSaveAction;
|
||||||
|
QAction* m_fileQuitAction;
|
||||||
|
|
||||||
|
QAction* m_listAdd;
|
||||||
|
QAction* m_listEdit;
|
||||||
|
QAction* m_listRemove;
|
||||||
|
|
||||||
|
QAction* m_manufacturerListAddAction;
|
||||||
|
QAction* m_manufacturerListEditAction;
|
||||||
|
QAction* m_manufacturerListRemoveAction;
|
||||||
|
|
||||||
|
QAction* m_distributorListAddAction;
|
||||||
|
QAction* m_distributorListEditAction;
|
||||||
|
QAction* m_distributorListRemoveAction;
|
||||||
|
|
||||||
|
QStandardItemModel* m_manufacturerListModel;
|
||||||
|
QStandardItemModel* m_distributorListModel;
|
||||||
|
QStandardItemModel* m_storageListModel;
|
||||||
|
|
||||||
|
bool m_updatingTab;
|
||||||
|
|
||||||
|
|
||||||
|
void initUI();
|
||||||
|
void createActions();
|
||||||
|
void createFileActions();
|
||||||
|
void createContextActions();
|
||||||
|
|
||||||
|
void loadData();
|
||||||
|
|
||||||
|
void setListButtonState();
|
||||||
|
|
||||||
|
qint16 activeTab();
|
||||||
|
|
||||||
|
void updateWindowTitle();
|
||||||
|
|
||||||
|
void addManufacturer();
|
||||||
|
void editManufacturer();
|
||||||
|
void removeManufacturer();
|
||||||
|
|
||||||
|
void addDistributor();
|
||||||
|
void editDistributor();
|
||||||
|
void removeDistributor();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void closeEvent(QCloseEvent* event);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onSomethingChanged();
|
||||||
|
|
||||||
|
void onToolBoxCurrentChanged(int index);
|
||||||
|
|
||||||
|
void onFileSave();
|
||||||
|
|
||||||
|
void onMainTabCurrentChanged(int index);
|
||||||
|
void onMainTabTabCloseRequested(int index);
|
||||||
|
void onMdiAreaSubWindowActivated(QMdiSubWindow *arg1);
|
||||||
|
void onSubWindowClosed(QWidget* lpSubWindow);
|
||||||
|
|
||||||
|
void onManufacturerListClicked(const QModelIndex& index);
|
||||||
|
void onManufacturerListDoubleClicked(const QModelIndex& index);
|
||||||
|
void onManufacturerListContextMenu(const QPoint& pos);
|
||||||
|
void onManufacturerListNameChanged(QStandardItem* item);
|
||||||
|
void onManufacturerListAddClicked();
|
||||||
|
void onManufacturerListEditClicked();
|
||||||
|
void onManufacturerListRemoveClicked();
|
||||||
|
|
||||||
|
void onDistributorListClicked(const QModelIndex& index);
|
||||||
|
void onDistributorListDoubleClicked(const QModelIndex& index);
|
||||||
|
void onDistributorListContextMenu(const QPoint& pos);
|
||||||
|
void onDistributorListNameChanged(QStandardItem* item);
|
||||||
|
void onDistributorListAddClicked();
|
||||||
|
void onDistributorListEditClicked();
|
||||||
|
void onDistributorListRemoveClicked();
|
||||||
|
|
||||||
|
void onListAdd();
|
||||||
|
void onListEdit();
|
||||||
|
void onListRemove();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void manufacturerNameChanged(cManufacturer* manufacturer);
|
||||||
|
void distributorNameChanged(cDistributor* distributor);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CMAINWINDOW_H
|
||||||
+240
@@ -0,0 +1,240 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>cMainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="cMainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>800</width>
|
||||||
|
<height>600</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QSplitter" name="m_splitter">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="verticalLayoutWidget">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="m_buttonLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="m_listAdd">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="toolButtonStyle">
|
||||||
|
<enum>Qt::ToolButtonIconOnly</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="m_listEdit">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="m_listRemove">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolBox" name="m_toolBox">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="m_manufacturerListTab">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>89</width>
|
||||||
|
<height>362</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<attribute name="label">
|
||||||
|
<string>Manufacturer</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTreeView" name="m_manufacturerList">
|
||||||
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::CustomContextMenu</enum>
|
||||||
|
</property>
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::EditKeyPressed</set>
|
||||||
|
</property>
|
||||||
|
<property name="rootIsDecorated">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="headerVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="m_distributorListTab">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>89</width>
|
||||||
|
<height>362</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<attribute name="label">
|
||||||
|
<string>Distributor</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTreeView" name="m_distributorList">
|
||||||
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::CustomContextMenu</enum>
|
||||||
|
</property>
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::EditKeyPressed</set>
|
||||||
|
</property>
|
||||||
|
<property name="rootIsDecorated">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="headerHidden">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="m_storage">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>89</width>
|
||||||
|
<height>362</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<attribute name="label">
|
||||||
|
<string>Storage</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTreeView" name="m_storageList">
|
||||||
|
<property name="rootIsDecorated">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="headerVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="m_partListTab">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>89</width>
|
||||||
|
<height>362</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<attribute name="label">
|
||||||
|
<string>Part</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="m_projectListTab">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>89</width>
|
||||||
|
<height>362</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<attribute name="label">
|
||||||
|
<string>Project</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="verticalLayoutWidget_2">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,99">
|
||||||
|
<item>
|
||||||
|
<widget class="QTabWidget" name="m_mainTab">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>-1</number>
|
||||||
|
</property>
|
||||||
|
<property name="documentMode">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="tabsClosable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="movable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QMdiArea" name="m_mdiArea"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="m_menuBar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>800</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="m_statusBar"/>
|
||||||
|
<widget class="QToolBar" name="m_toolBar">
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>toolBar</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="toolBarArea">
|
||||||
|
<enum>TopToolBarArea</enum>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="toolBarBreak">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
@@ -0,0 +1,364 @@
|
|||||||
|
#include "cmanufacturer.h"
|
||||||
|
|
||||||
|
#include <QSqlQuery>
|
||||||
|
#include <QSqlError>
|
||||||
|
|
||||||
|
#include <QStandardItem>
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
|
||||||
|
cManufacturer::cManufacturer(cDatabase* db, qint32 id, QObject* parent) :
|
||||||
|
QObject(parent),
|
||||||
|
m_db(db),
|
||||||
|
m_changed(false),
|
||||||
|
m_id(id),
|
||||||
|
m_name(""),
|
||||||
|
m_address(""),
|
||||||
|
m_url(""),
|
||||||
|
m_email(""),
|
||||||
|
m_comment(""),
|
||||||
|
m_phone(""),
|
||||||
|
m_fax(""),
|
||||||
|
m_item(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
cManufacturer::cManufacturer(cManufacturer* manufacturer)
|
||||||
|
{
|
||||||
|
set(manufacturer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturer::set(cManufacturer* manufacturer)
|
||||||
|
{
|
||||||
|
m_db = manufacturer->db();
|
||||||
|
m_id = manufacturer->id();
|
||||||
|
m_name = manufacturer->name();
|
||||||
|
m_address = manufacturer->address();
|
||||||
|
m_url = manufacturer->url();
|
||||||
|
m_email = manufacturer->email();
|
||||||
|
m_comment = manufacturer->comment();
|
||||||
|
m_phone = manufacturer->phone();
|
||||||
|
m_fax = manufacturer->fax();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturer::setID(const qint32& id)
|
||||||
|
{
|
||||||
|
m_id = id;
|
||||||
|
m_changed = true;
|
||||||
|
emit idChanged(id);
|
||||||
|
emit manufacturerChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
qint32 cManufacturer::id()
|
||||||
|
{
|
||||||
|
return(m_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturer::setName(const QString& name)
|
||||||
|
{
|
||||||
|
m_name = name;
|
||||||
|
m_changed = true;
|
||||||
|
emit nameChanged(name);
|
||||||
|
emit manufacturerChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cManufacturer::name()
|
||||||
|
{
|
||||||
|
return(m_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturer::setAddress(const QString& address)
|
||||||
|
{
|
||||||
|
m_address = address;
|
||||||
|
emit addressChanged(address);
|
||||||
|
emit manufacturerChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cManufacturer::address()
|
||||||
|
{
|
||||||
|
return(m_address);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturer::setURL(const QString& url)
|
||||||
|
{
|
||||||
|
m_url = url;
|
||||||
|
m_changed = true;
|
||||||
|
emit urlChanged(url);
|
||||||
|
emit manufacturerChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cManufacturer::url()
|
||||||
|
{
|
||||||
|
return(m_url);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturer::setEmail(const QString& email)
|
||||||
|
{
|
||||||
|
m_email = email;
|
||||||
|
m_changed = true;
|
||||||
|
emit emailChanged(email);
|
||||||
|
emit manufacturerChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cManufacturer::email()
|
||||||
|
{
|
||||||
|
return(m_email);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturer::setComment(const QString& comment)
|
||||||
|
{
|
||||||
|
m_comment = comment;
|
||||||
|
emit commentChanged(comment);
|
||||||
|
emit manufacturerChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cManufacturer::comment()
|
||||||
|
{
|
||||||
|
return(m_comment);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturer::setPhone(const QString& phone)
|
||||||
|
{
|
||||||
|
m_phone = phone;
|
||||||
|
m_changed = true;
|
||||||
|
emit phoneChanged(phone);
|
||||||
|
emit manufacturerChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cManufacturer::phone()
|
||||||
|
{
|
||||||
|
return(m_phone);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturer::setFax(const QString& fax)
|
||||||
|
{
|
||||||
|
m_fax = fax;
|
||||||
|
m_changed = true;
|
||||||
|
emit faxChanged(fax);
|
||||||
|
emit manufacturerChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cManufacturer::fax()
|
||||||
|
{
|
||||||
|
return(m_fax);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturer::setItem(QStandardItem* item)
|
||||||
|
{
|
||||||
|
m_item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStandardItem* cManufacturer::item()
|
||||||
|
{
|
||||||
|
return(m_item);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cManufacturer::save()
|
||||||
|
{
|
||||||
|
if(!m_changed)
|
||||||
|
return(true);
|
||||||
|
|
||||||
|
QSqlQuery query(m_db->db());
|
||||||
|
|
||||||
|
if(m_id == -1)
|
||||||
|
query.prepare("INSERT INTO manufacturer (name, address, url, email, comment, phone, fax) VALUES (:name, :address, :url, :email, :comment, :phone, :fax);");
|
||||||
|
else
|
||||||
|
query.prepare("UPDATE manufacturer SET name=:name, address=:address, url=:url, email=:email, comment=:comment, phone=:phone, fax=:fax WHERE id=:id;");
|
||||||
|
|
||||||
|
query.bindValue(":id", m_id);
|
||||||
|
query.bindValue(":name", m_name);
|
||||||
|
query.bindValue(":address", m_address);
|
||||||
|
query.bindValue(":url", m_url);
|
||||||
|
query.bindValue(":email", m_email);
|
||||||
|
query.bindValue(":comment", m_comment);
|
||||||
|
query.bindValue(":phone", m_phone);
|
||||||
|
query.bindValue(":fax", m_fax);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_id == -1)
|
||||||
|
{
|
||||||
|
if(!query.exec("SELECT MAX(id) MAXID FROM manufacturer;"))
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
query.first();
|
||||||
|
m_id = query.value("MAXID").toInt();
|
||||||
|
}
|
||||||
|
m_changed = false;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cDatabase* cManufacturer::db()
|
||||||
|
{
|
||||||
|
return(m_db);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cManufacturer::remove()
|
||||||
|
{
|
||||||
|
QSqlQuery query(m_db->db());
|
||||||
|
|
||||||
|
query.prepare("DELETE FROM manufacturer WHERE id=:id;");
|
||||||
|
query.bindValue(":id", m_id);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturer::clearSave()
|
||||||
|
{
|
||||||
|
m_changed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cManufacturerList::cManufacturerList(cDatabase* db, QObject* parent) :
|
||||||
|
QObject(parent),
|
||||||
|
m_db(db)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cManufacturerList::load()
|
||||||
|
{
|
||||||
|
if(!m_db->db().isOpen())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
QString sql = QString("SELECT id, "
|
||||||
|
" name, "
|
||||||
|
" address, "
|
||||||
|
" url, "
|
||||||
|
" email, "
|
||||||
|
" comment, "
|
||||||
|
" phone, "
|
||||||
|
" fax "
|
||||||
|
"FROM manufacturer "
|
||||||
|
"ORDER BY name;");
|
||||||
|
QSqlQuery query(m_db->db());
|
||||||
|
|
||||||
|
query.prepare(sql);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
while(query.next())
|
||||||
|
{
|
||||||
|
cManufacturer* lpManufacturer = add(query.value("id").toInt());
|
||||||
|
lpManufacturer->setName(query.value("name").toString());
|
||||||
|
lpManufacturer->setAddress(query.value("address").toString());
|
||||||
|
lpManufacturer->setURL(query.value("url").toString());
|
||||||
|
lpManufacturer->setEmail(query.value("email").toString());
|
||||||
|
lpManufacturer->setComment(query.value("comment").toString());
|
||||||
|
lpManufacturer->setPhone(query.value("phone").toString());
|
||||||
|
lpManufacturer->setFax(query.value("fax").toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cManufacturer* cManufacturerList::add(const qint32& id)
|
||||||
|
{
|
||||||
|
cManufacturer* lpNew = find(id);
|
||||||
|
|
||||||
|
if(!lpNew)
|
||||||
|
{
|
||||||
|
lpNew = new cManufacturer(m_db, id);
|
||||||
|
append(lpNew);
|
||||||
|
emit manufacturerAdded(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
cManufacturer* cManufacturerList::add(const QString& name)
|
||||||
|
{
|
||||||
|
cManufacturer* lpNew = new cManufacturer(m_db);
|
||||||
|
lpNew->setName(name);
|
||||||
|
append(lpNew);
|
||||||
|
emit manufacturerAdded(lpNew);
|
||||||
|
|
||||||
|
return(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cManufacturerList::remove(const qint32& id)
|
||||||
|
{
|
||||||
|
cManufacturer* manufacturer = find(id);
|
||||||
|
if(!manufacturer)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!manufacturer->remove())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!removeOne(manufacturer))
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
emit manufacturerRemoved(manufacturer);
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cManufacturer* cManufacturerList::find(const qint32& id)
|
||||||
|
{
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(at(i)->id() == id)
|
||||||
|
return(at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
return(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
cManufacturer* cManufacturerList::find(const QString& name)
|
||||||
|
{
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(at(i)->name() == name)
|
||||||
|
return(at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
return(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cManufacturerList::fillList(QStandardItemModel* model)
|
||||||
|
{
|
||||||
|
model->clear();
|
||||||
|
|
||||||
|
if(!count())
|
||||||
|
return(true);
|
||||||
|
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
QStandardItem* item = new QStandardItem;
|
||||||
|
at(i)->setItem(item);
|
||||||
|
item->setText(at(i)->name());
|
||||||
|
item->setData(QVariant::fromValue(at(i)), ITEM_MANUFACTURER_DATA);
|
||||||
|
model->appendRow(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cManufacturerList::save()
|
||||||
|
{
|
||||||
|
bool ret = true;
|
||||||
|
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(!at(i)->save())
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
+108
@@ -0,0 +1,108 @@
|
|||||||
|
#ifndef CMANUFACTURER_H
|
||||||
|
#define CMANUFACTURER_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "cdatabase.h"
|
||||||
|
|
||||||
|
#include <QMetaType>
|
||||||
|
#include <QList>
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include <QStandardItem>
|
||||||
|
#include <QStandardItemModel>
|
||||||
|
|
||||||
|
|
||||||
|
class cManufacturer : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit cManufacturer(cDatabase* db, qint32 id = -1, QObject* parent = nullptr);
|
||||||
|
cManufacturer(cManufacturer* manufacturer);
|
||||||
|
|
||||||
|
void set(cManufacturer* manufacturer);
|
||||||
|
|
||||||
|
void setID(const qint32& id);
|
||||||
|
qint32 id();
|
||||||
|
|
||||||
|
void setName(const QString& name);
|
||||||
|
QString name();
|
||||||
|
|
||||||
|
void setAddress(const QString& address);
|
||||||
|
QString address();
|
||||||
|
|
||||||
|
void setURL(const QString& url);
|
||||||
|
QString url();
|
||||||
|
|
||||||
|
void setEmail(const QString& email);
|
||||||
|
QString email();
|
||||||
|
|
||||||
|
void setComment(const QString& comment);
|
||||||
|
QString comment();
|
||||||
|
|
||||||
|
void setPhone(const QString& phone);
|
||||||
|
QString phone();
|
||||||
|
|
||||||
|
void setFax(const QString& fax);
|
||||||
|
QString fax();
|
||||||
|
|
||||||
|
void setItem(QStandardItem* item);
|
||||||
|
QStandardItem* item();
|
||||||
|
|
||||||
|
bool save();
|
||||||
|
void clearSave();
|
||||||
|
bool remove();
|
||||||
|
|
||||||
|
cDatabase* db();
|
||||||
|
private:
|
||||||
|
cDatabase* m_db;
|
||||||
|
bool m_changed;
|
||||||
|
qint32 m_id;
|
||||||
|
QString m_name;
|
||||||
|
QString m_address;
|
||||||
|
QString m_url;
|
||||||
|
QString m_email;
|
||||||
|
QString m_comment;
|
||||||
|
QString m_phone;
|
||||||
|
QString m_fax;
|
||||||
|
QStandardItem* m_item;
|
||||||
|
signals:
|
||||||
|
void manufacturerChanged(cManufacturer* manufacturer);
|
||||||
|
void idChanged(const qint32& id);
|
||||||
|
void nameChanged(const QString& name);
|
||||||
|
void addressChanged(const QString& address);
|
||||||
|
void urlChanged(const QString& url);
|
||||||
|
void emailChanged(const QString& email);
|
||||||
|
void commentChanged(const QString& comment);
|
||||||
|
void phoneChanged(const QString& phone);
|
||||||
|
void faxChanged(const QString& fax);
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(cManufacturer*)
|
||||||
|
|
||||||
|
class cManufacturerList : public QObject, public QList<cManufacturer*>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
cManufacturerList(cDatabase* db, QObject* parent = nullptr);
|
||||||
|
|
||||||
|
bool load();
|
||||||
|
cManufacturer* add(const qint32& id);
|
||||||
|
cManufacturer* add(const QString& name);
|
||||||
|
bool remove(const qint32& id);
|
||||||
|
cManufacturer* find(const qint32& id);
|
||||||
|
cManufacturer* find(const QString& name);
|
||||||
|
|
||||||
|
bool fillList(QStandardItemModel* model);
|
||||||
|
|
||||||
|
bool save();
|
||||||
|
private:
|
||||||
|
cDatabase* m_db;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void manufacturerAdded(cManufacturer* manufacturer);
|
||||||
|
void manufacturerRemoved(cManufacturer* manufacturer);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CMANUFACTURER_H
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
#include "cmanufacturerwindow.h"
|
||||||
|
#include "ui_cmanufacturerwindow.h"
|
||||||
|
|
||||||
|
#include "cmainwindow.h"
|
||||||
|
|
||||||
|
|
||||||
|
cManufacturerWindow::cManufacturerWindow(QWidget *parent) :
|
||||||
|
cMDISubWindow(parent),
|
||||||
|
ui(new Ui::cManufacturerWindow),
|
||||||
|
m_manufacturer(nullptr)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
cManufacturerWindow::~cManufacturerWindow()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturerWindow::setManufacturer(cManufacturer* manufacturer)
|
||||||
|
{
|
||||||
|
m_manufacturer = manufacturer;
|
||||||
|
|
||||||
|
fillFields();
|
||||||
|
|
||||||
|
connect(ui->m_name, &QLineEdit::textChanged, this, &cManufacturerWindow::onNameChanged);
|
||||||
|
connect(ui->m_address, &QPlainTextEdit::textChanged, this, &cManufacturerWindow::onAddressChanged);
|
||||||
|
connect(ui->m_url, &QLineEdit::textChanged, this, &cManufacturerWindow::onURLChanged);
|
||||||
|
connect(ui->m_email, &QLineEdit::textChanged, this, &cManufacturerWindow::onEmailChanged);
|
||||||
|
connect(ui->m_phone, &QLineEdit::textChanged, this, &cManufacturerWindow::onPhoneChanged);
|
||||||
|
connect(ui->m_fax, &QLineEdit::textChanged, this, &cManufacturerWindow::onFaxChanged);
|
||||||
|
connect(ui->m_comment, &QPlainTextEdit::textChanged, this, &cManufacturerWindow::onCommentChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
cManufacturer* cManufacturerWindow::manufacturer()
|
||||||
|
{
|
||||||
|
return(m_manufacturer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturerWindow::onManufacturerChanged(cManufacturer* manufacturer)
|
||||||
|
{
|
||||||
|
if(m_manufacturer != manufacturer)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fillFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturerWindow::onNameChanged(const QString& name)
|
||||||
|
{
|
||||||
|
m_manufacturer->setName(name);
|
||||||
|
|
||||||
|
if(m_manufacturer->item())
|
||||||
|
m_manufacturer->item()->setText(name);
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturerWindow::onAddressChanged()
|
||||||
|
{
|
||||||
|
m_manufacturer->setAddress(ui->m_address->toPlainText());
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturerWindow::onURLChanged(const QString& url)
|
||||||
|
{
|
||||||
|
m_manufacturer->setURL(url);
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturerWindow::onEmailChanged(const QString& email)
|
||||||
|
{
|
||||||
|
m_manufacturer->setEmail(email);
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturerWindow::onPhoneChanged(const QString& phone)
|
||||||
|
{
|
||||||
|
m_manufacturer->setPhone(phone);
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturerWindow::onFaxChanged(const QString& fax)
|
||||||
|
{
|
||||||
|
m_manufacturer->setFax(fax);
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturerWindow::onCommentChanged()
|
||||||
|
{
|
||||||
|
m_manufacturer->setComment(ui->m_comment->toPlainText());
|
||||||
|
|
||||||
|
emit somethingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cManufacturerWindow::fillFields()
|
||||||
|
{
|
||||||
|
ui->m_name->setText(m_manufacturer->name());
|
||||||
|
ui->m_address->setPlainText(m_manufacturer->address());
|
||||||
|
ui->m_url->setText(m_manufacturer->url());
|
||||||
|
ui->m_email->setText(m_manufacturer->email());
|
||||||
|
ui->m_phone->setText(m_manufacturer->phone());
|
||||||
|
ui->m_fax->setText(m_manufacturer->fax());
|
||||||
|
ui->m_comment->setPlainText(m_manufacturer->comment());
|
||||||
|
|
||||||
|
setWindowTitle("manufacturer - " + m_manufacturer->name());
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
#ifndef CMANUFACTURERWINDOW_H
|
||||||
|
#define CMANUFACTURERWINDOW_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "cmanufacturer.h"
|
||||||
|
|
||||||
|
#include "cmdisubwindow.h"
|
||||||
|
#include "cmainwindow.h"
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class cManufacturerWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
class cManufacturerWindow : public cMDISubWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit cManufacturerWindow(QWidget *parent = nullptr);
|
||||||
|
~cManufacturerWindow();
|
||||||
|
|
||||||
|
void setManufacturer(cManufacturer* manufacturer);
|
||||||
|
cManufacturer* manufacturer();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::cManufacturerWindow* ui;
|
||||||
|
cManufacturer* m_manufacturer;
|
||||||
|
|
||||||
|
void fillFields();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void onManufacturerChanged(cManufacturer* manufacturer);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onNameChanged(const QString& szName);
|
||||||
|
void onAddressChanged();
|
||||||
|
void onURLChanged(const QString& szURL);
|
||||||
|
void onEmailChanged(const QString& szEmail);
|
||||||
|
void onPhoneChanged(const QString& szPhone);
|
||||||
|
void onFaxChanged(const QString& szFax);
|
||||||
|
void onCommentChanged();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void somethingChanged();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CMANUFACTURERWINDOW_H
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>cManufacturerWindow</class>
|
||||||
|
<widget class="QWidget" name="cManufacturerWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Manufacturer - </string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Name:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="m_name"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Address:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QPlainTextEdit" name="m_address"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>URL:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLineEdit" name="m_url"/>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>Email:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QLineEdit" name="m_email"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Phone:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLineEdit" name="m_phone"/>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>Fax:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QLineEdit" name="m_fax"/>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="text">
|
||||||
|
<string>Comment:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="1">
|
||||||
|
<widget class="QPlainTextEdit" name="m_comment"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/*!
|
||||||
|
\file cmdisubwindow.cpp
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "cmdisubwindow.h"
|
||||||
|
|
||||||
|
#include <QCloseEvent>
|
||||||
|
|
||||||
|
|
||||||
|
cMDISubWindow::cMDISubWindow(QWidget *parent) : QWidget(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void cMDISubWindow::closeEvent(QCloseEvent* event)
|
||||||
|
{
|
||||||
|
emit subWindowClosed(this);
|
||||||
|
event->accept();
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/*!
|
||||||
|
\file cmdisubwindow.h
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CMDISUBWINDOW_H
|
||||||
|
#define CMDISUBWINDOW_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\class cMDISubWindow cmdisubwindow.h "cmdisubwindow.h"
|
||||||
|
*/
|
||||||
|
class cMDISubWindow : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\fn cMDISubWindow
|
||||||
|
\param parent
|
||||||
|
*/
|
||||||
|
explicit cMDISubWindow(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\fn subWindowClosed
|
||||||
|
\param lpWidget
|
||||||
|
*/
|
||||||
|
void subWindowClosed(QWidget* lpWidget);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\fn closeEvent
|
||||||
|
\param event
|
||||||
|
*/
|
||||||
|
void closeEvent(QCloseEvent *event);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CMDISUBWINDOW_H
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
/*!
|
||||||
|
\file common.cpp
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\file common.cpp
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
/*!
|
||||||
|
\file common.h
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COMMON_H
|
||||||
|
#define COMMON_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
|
||||||
|
#define THUMBNAIL_WIDTH 160
|
||||||
|
#define THUMBNAIL_HEIGHT 120
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define myDebug qDebug() << __FILE__ << "(" << __LINE__ << ") - " << __PRETTY_FUNCTION__ << ":"
|
||||||
|
#elif __MINGW32__
|
||||||
|
#define myDebug qDebug() << __FILE__ << "(" << __LINE__ << ") - " << __PRETTY_FUNCTION__ << ":"
|
||||||
|
#else
|
||||||
|
#define myDebug qDebug() << __FILE__ << "(" << __LINE__ << ") - " << __FUNCTION__ << ":"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ITEM_MANUFACTURER_DATA (Qt::UserRole+1)
|
||||||
|
#define ITEM_DISTRIBUTOR_DATA (Qt::UserRole+2)
|
||||||
|
#define ITEM_STORAGE_CATEGORY_DATA (Qt::UserRole+3)
|
||||||
|
#define ITEM_STORAGE_DATA (Qt::UserRole+4)
|
||||||
|
#define ITEM_PART_DATA (Qt::UserRole+5)
|
||||||
|
#define ITEM_PROJECT_DATA (Qt::UserRole+6)
|
||||||
|
|
||||||
|
#define TAB_MANUFACTURER_LIST 1
|
||||||
|
#define TAB_DISTRIBUTOR_LIST 2
|
||||||
|
#define TAB_STORAGE_LIST 3
|
||||||
|
#define TAB_PART_LIST 4
|
||||||
|
#define TAB_PROJECT_LIST 5
|
||||||
|
|
||||||
|
|
||||||
|
#endif // COMMON_H
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
/*!
|
||||||
|
\file csplashscreen.cpp
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "csplashscreen.h"
|
||||||
|
//#include "common.h"
|
||||||
|
|
||||||
|
#include <QStyleOptionProgressBar>
|
||||||
|
|
||||||
|
|
||||||
|
cSplashScreen::cSplashScreen(const QPixmap& pixmap, QFont& font) :
|
||||||
|
QSplashScreen(pixmap),
|
||||||
|
m_iMax(100),
|
||||||
|
m_iProgress(0)
|
||||||
|
{
|
||||||
|
setFont(font);
|
||||||
|
m_textDocument.setDefaultFont(font);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cSplashScreen::setMax(qint32 max)
|
||||||
|
{
|
||||||
|
m_iMax = max;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cSplashScreen::drawContents(QPainter *painter)
|
||||||
|
{
|
||||||
|
painter->translate(m_rect.topLeft());
|
||||||
|
m_textDocument.setHtml(m_szMessage);
|
||||||
|
m_textDocument.drawContents(painter);
|
||||||
|
|
||||||
|
QStyleOptionProgressBar pbstyle;
|
||||||
|
pbstyle.initFrom(this);
|
||||||
|
pbstyle.state = QStyle::State_Enabled;
|
||||||
|
pbstyle.textVisible = false;
|
||||||
|
pbstyle.minimum = 0;
|
||||||
|
pbstyle.maximum = m_iMax;
|
||||||
|
pbstyle.progress = m_iProgress;
|
||||||
|
pbstyle.invertedAppearance = false;
|
||||||
|
pbstyle.rect = QRect(0, 330, 390, 10); // Where is it.
|
||||||
|
|
||||||
|
// Draw it...
|
||||||
|
style()->drawControl(QStyle::CE_ProgressBar, &pbstyle, painter, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cSplashScreen::showStatusMessage(const QString& message)
|
||||||
|
{
|
||||||
|
m_szMessage = message;
|
||||||
|
showMessage(m_szMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cSplashScreen::addStatusMessage(const QString& message)
|
||||||
|
{
|
||||||
|
m_szMessage.append(message);
|
||||||
|
showMessage(m_szMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cSplashScreen::setMessageRect(QRect rect)
|
||||||
|
{
|
||||||
|
m_rect = rect;
|
||||||
|
m_textDocument.setTextWidth(rect.width());
|
||||||
|
}
|
||||||
|
|
||||||
|
void cSplashScreen::setProgress(int value)
|
||||||
|
{
|
||||||
|
m_iProgress = value;
|
||||||
|
update();
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
/*!
|
||||||
|
\file csplashscreen.h
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CSPLASHSCREEN_H
|
||||||
|
#define CSPLASHSCREEN_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <QSplashScreen>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QTextDocument>
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\class cSplashScreen csplashscreen.h "csplashscreen.h"
|
||||||
|
*/
|
||||||
|
class cSplashScreen : public QSplashScreen
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
cSplashScreen(const QPixmap& pixmap, QFont &font);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\fn drawContents
|
||||||
|
\param painter
|
||||||
|
*/
|
||||||
|
virtual void drawContents(QPainter *painter);
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\fn showStatusMessage
|
||||||
|
\param message
|
||||||
|
*/
|
||||||
|
void showStatusMessage(const QString &message);
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\fn addStatusMessage
|
||||||
|
\param message
|
||||||
|
*/
|
||||||
|
void addStatusMessage(const QString &message);
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\fn setMessageRect
|
||||||
|
\param rect
|
||||||
|
*/
|
||||||
|
void setMessageRect(QRect rect);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\fn setMax
|
||||||
|
\param max
|
||||||
|
*/
|
||||||
|
void setMax(qint32 max);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QTextDocument m_textDocument; /*!< TODO: describe */
|
||||||
|
QString m_szMessage; /*!< TODO: describe */
|
||||||
|
QRect m_rect; /*!< TODO: describe */
|
||||||
|
qint32 m_iMax; /*!< TODO: describe */
|
||||||
|
qint32 m_iProgress; /*!< TODO: describe */
|
||||||
|
public slots:
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\fn setProgress
|
||||||
|
\param value
|
||||||
|
*/
|
||||||
|
void setProgress(int value);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CSPLASHSCREEN_H
|
||||||
+325
@@ -0,0 +1,325 @@
|
|||||||
|
#include "cstorage.h"
|
||||||
|
|
||||||
|
#include <QSqlQuery>
|
||||||
|
#include <QSqlError>
|
||||||
|
|
||||||
|
#include <QStandardItem>
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
|
||||||
|
bool sortAsc(cStorage* &v1, cStorage* &v2)
|
||||||
|
{
|
||||||
|
return(v1->name() < v2->name());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
cStorage::cStorage(cDatabase* db, qint32 id, QObject *parent) :
|
||||||
|
QObject(parent),
|
||||||
|
m_db(db),
|
||||||
|
m_changed(false),
|
||||||
|
m_id(id),
|
||||||
|
m_storageCategory(nullptr),
|
||||||
|
m_name(""),
|
||||||
|
m_description(""),
|
||||||
|
m_item(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorage::cStorage(cStorage* storage)
|
||||||
|
{
|
||||||
|
set(storage);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorage::set(cStorage* storage)
|
||||||
|
{
|
||||||
|
m_db = storage->db();
|
||||||
|
m_id = storage->id();
|
||||||
|
m_storageCategory = storage->storageCategory();
|
||||||
|
m_name = storage->name();
|
||||||
|
m_description = storage->description();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorage::setID(const qint32& id)
|
||||||
|
{
|
||||||
|
m_id = id;
|
||||||
|
m_changed = true;
|
||||||
|
emit idChanged(id);
|
||||||
|
emit storageChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
qint32 cStorage::id()
|
||||||
|
{
|
||||||
|
return(m_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorage::setStorageCategory(cStorageCategory* storageCategory)
|
||||||
|
{
|
||||||
|
m_storageCategory = storageCategory;
|
||||||
|
m_changed = true;
|
||||||
|
emit storageCategoryChanged(storageCategory);
|
||||||
|
emit storageChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageCategory* cStorage::storageCategory()
|
||||||
|
{
|
||||||
|
return(m_storageCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorage::setName(const QString& name)
|
||||||
|
{
|
||||||
|
m_name = name;
|
||||||
|
m_changed = true;
|
||||||
|
emit nameChanged(name);
|
||||||
|
emit storageChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cStorage::name()
|
||||||
|
{
|
||||||
|
return(m_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorage::setDescription(const QString& description)
|
||||||
|
{
|
||||||
|
m_description = description;
|
||||||
|
m_changed = true;
|
||||||
|
emit descriptionChanged(description);
|
||||||
|
emit storageChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cStorage::description()
|
||||||
|
{
|
||||||
|
return(m_description);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorage::setItem(QStandardItem* item)
|
||||||
|
{
|
||||||
|
m_item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStandardItem* cStorage::item()
|
||||||
|
{
|
||||||
|
return(m_item);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorage::save()
|
||||||
|
{
|
||||||
|
if(!m_changed)
|
||||||
|
return(true);
|
||||||
|
|
||||||
|
QSqlQuery query;
|
||||||
|
|
||||||
|
if(m_id == -1)
|
||||||
|
query.prepare("INSERT INTO storage (storageCategory, name, description) VALUES (:storageCategory, :name, :description);");
|
||||||
|
else
|
||||||
|
query.prepare("UPDATE storage SET storageCategory=:storageCategory, name=:name, description=:description WHERE id=:id;");
|
||||||
|
|
||||||
|
query.bindValue(":id", m_id);
|
||||||
|
query.bindValue(":storageCategory", m_storageCategory->id());
|
||||||
|
query.bindValue(":name", m_name);
|
||||||
|
query.bindValue(":description", m_description);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_id == -1)
|
||||||
|
{
|
||||||
|
if(!query.exec("SELECT MAX(id) MAXID FROM storage;"))
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
query.first();
|
||||||
|
m_id = query.value("MAXID").toInt();
|
||||||
|
}
|
||||||
|
m_changed = false;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorage::clearSave()
|
||||||
|
{
|
||||||
|
m_changed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorage::remove()
|
||||||
|
{
|
||||||
|
QSqlQuery query;
|
||||||
|
|
||||||
|
query.prepare("DELETE FROM storage WHERE id=:id;");
|
||||||
|
query.bindValue(":id", m_id);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cDatabase* cStorage::db()
|
||||||
|
{
|
||||||
|
return(m_db);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageList::cStorageList(cDatabase* db, cStorageCategoryList* storageCategoryList, QObject* parent) :
|
||||||
|
QObject(parent),
|
||||||
|
m_db(db),
|
||||||
|
m_storageCategoryList(storageCategoryList)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorageList::load()
|
||||||
|
{
|
||||||
|
if(!m_db->db().isOpen())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
QString sql = QString("SELECT id, "
|
||||||
|
" storage_category_id, "
|
||||||
|
" name, "
|
||||||
|
" description "
|
||||||
|
"FROM storage "
|
||||||
|
"ORDER BY name, "
|
||||||
|
" id;");
|
||||||
|
QSqlQuery query(m_db->db());
|
||||||
|
|
||||||
|
query.prepare(sql);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
while(query.next())
|
||||||
|
{
|
||||||
|
cStorage* lpStorage = new cStorage(m_db, query.value("id").toInt());
|
||||||
|
cStorageCategory* storageCatgegory = m_storageCategoryList->find(query.value("storage_category_id").toInt());
|
||||||
|
lpStorage->setStorageCategory(storageCatgegory);
|
||||||
|
lpStorage->setName(query.value("name").toString());
|
||||||
|
lpStorage->setDescription(query.value("description").toString());
|
||||||
|
storageCatgegory->addStorage(lpStorage);
|
||||||
|
|
||||||
|
add(lpStorage);
|
||||||
|
}
|
||||||
|
|
||||||
|
sort();
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorage* cStorageList::add(const qint32& id)
|
||||||
|
{
|
||||||
|
cStorage* lpNew = find(id);
|
||||||
|
|
||||||
|
if(!lpNew)
|
||||||
|
{
|
||||||
|
lpNew = new cStorage(m_db, id);
|
||||||
|
append(lpNew);
|
||||||
|
emit storageAdded(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorage* cStorageList::add(const QString& name)
|
||||||
|
{
|
||||||
|
cStorage* lpNew = new cStorage(m_db);
|
||||||
|
lpNew->setName(name);
|
||||||
|
append(lpNew);
|
||||||
|
emit storageAdded(lpNew);
|
||||||
|
|
||||||
|
return(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageList::add(cStorage* storage)
|
||||||
|
{
|
||||||
|
append(storage);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorageList::remove(const qint32& id)
|
||||||
|
{
|
||||||
|
cStorage* storage = find(id);
|
||||||
|
if(!storage)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!storage->remove())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!removeOne(storage))
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
emit storageRemoved(storage);
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorage* cStorageList::find(const qint32& id)
|
||||||
|
{
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(at(i)->id() == id)
|
||||||
|
return(at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
return(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorage* cStorageList::find(const QString& name)
|
||||||
|
{
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(at(i)->name() == name)
|
||||||
|
return(at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
return(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageList::sort()
|
||||||
|
{
|
||||||
|
std::sort(begin(), end(), sortAsc);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorageList::fillList()
|
||||||
|
{
|
||||||
|
if(!count())
|
||||||
|
return(true);
|
||||||
|
|
||||||
|
QStandardItem i;
|
||||||
|
QFont font = i.font();
|
||||||
|
font.setItalic(true);
|
||||||
|
font.setBold(true);
|
||||||
|
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
QStandardItem* item = new QStandardItem;
|
||||||
|
at(i)->setItem(item);
|
||||||
|
item->setText(at(i)->name());
|
||||||
|
item->setData(QVariant::fromValue(at(i)), ITEM_STORAGE_DATA);
|
||||||
|
item->setFont(font);
|
||||||
|
|
||||||
|
at(i)->storageCategory()->item()->appendRow(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorageList::save()
|
||||||
|
{
|
||||||
|
bool ret = true;
|
||||||
|
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(!at(i)->save())
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
+92
@@ -0,0 +1,92 @@
|
|||||||
|
#ifndef CSTORAGE_H
|
||||||
|
#define CSTORAGE_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "cdatabase.h"
|
||||||
|
#include "cstoragecategory.h"
|
||||||
|
|
||||||
|
#include <QMetaType>
|
||||||
|
#include <QList>
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include <QStandardItem>
|
||||||
|
#include <QStandardItemModel>
|
||||||
|
|
||||||
|
|
||||||
|
class cStorage : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit cStorage(cDatabase* db, qint32 id = -1, QObject *parent = nullptr);
|
||||||
|
cStorage(cStorage* storage);
|
||||||
|
|
||||||
|
void set(cStorage* storage);
|
||||||
|
|
||||||
|
void setID(const qint32& id);
|
||||||
|
qint32 id();
|
||||||
|
|
||||||
|
void setStorageCategory(cStorageCategory* storageCategory);
|
||||||
|
cStorageCategory* storageCategory();
|
||||||
|
|
||||||
|
void setName(const QString& name);
|
||||||
|
QString name();
|
||||||
|
|
||||||
|
void setDescription(const QString& description);
|
||||||
|
QString description();
|
||||||
|
|
||||||
|
void setItem(QStandardItem* item);
|
||||||
|
QStandardItem* item();
|
||||||
|
|
||||||
|
bool save();
|
||||||
|
void clearSave();
|
||||||
|
bool remove();
|
||||||
|
|
||||||
|
cDatabase* db();
|
||||||
|
private:
|
||||||
|
cDatabase* m_db;
|
||||||
|
bool m_changed;
|
||||||
|
qint32 m_id;
|
||||||
|
cStorageCategory* m_storageCategory;
|
||||||
|
QString m_name;
|
||||||
|
QString m_description;
|
||||||
|
QStandardItem* m_item;
|
||||||
|
signals:
|
||||||
|
void storageChanged(cStorage* storage);
|
||||||
|
void idChanged(const qint32& id);
|
||||||
|
void storageCategoryChanged(cStorageCategory* storageCategory);
|
||||||
|
void nameChanged(const QString& name);
|
||||||
|
void descriptionChanged(const QString& description);
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(cStorage*)
|
||||||
|
|
||||||
|
class cStorageList : public QObject, public QList<cStorage*>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
cStorageList(cDatabase* db, cStorageCategoryList* storageCategoryList, QObject* parent = nullptr);
|
||||||
|
|
||||||
|
bool load();
|
||||||
|
cStorage* add(const qint32& id);
|
||||||
|
cStorage* add(const QString& name);
|
||||||
|
void add(cStorage* storage);
|
||||||
|
bool remove(const qint32& id);
|
||||||
|
cStorage* find(const qint32& id);
|
||||||
|
cStorage* find(const QString& name);
|
||||||
|
|
||||||
|
void sort();
|
||||||
|
|
||||||
|
bool fillList();
|
||||||
|
|
||||||
|
bool save();
|
||||||
|
private:
|
||||||
|
cDatabase* m_db;
|
||||||
|
cStorageCategoryList* m_storageCategoryList;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void storageAdded(cStorage* storage);
|
||||||
|
void storageRemoved(cStorage* storage);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CSTORAGE_H
|
||||||
@@ -0,0 +1,385 @@
|
|||||||
|
#include "cstoragecategory.h"
|
||||||
|
#include "cstorage.h"
|
||||||
|
|
||||||
|
#include <QSqlQuery>
|
||||||
|
#include <QSqlError>
|
||||||
|
|
||||||
|
#include <QStandardItem>
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
|
||||||
|
bool sortAsc(cStorageCategory* &v1, cStorageCategory* &v2)
|
||||||
|
{
|
||||||
|
return(v1->name() < v2->name());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
cStorageCategory::cStorageCategory(cDatabase* db, qint32 id, QObject* parent) :
|
||||||
|
QObject(parent),
|
||||||
|
m_db(db),
|
||||||
|
m_changed(false),
|
||||||
|
m_id(id),
|
||||||
|
m_parent(-1),
|
||||||
|
m_name(""),
|
||||||
|
m_description(""),
|
||||||
|
m_parentCategory(nullptr),
|
||||||
|
m_list(nullptr),
|
||||||
|
m_childList(new cStorageCategoryList(nullptr)),
|
||||||
|
m_storageList(new cStorageList(db, nullptr, nullptr)),
|
||||||
|
m_item(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageCategory::cStorageCategory(cStorageCategory* storageCategory)
|
||||||
|
{
|
||||||
|
set(storageCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageCategory::set(cStorageCategory* storageCategory)
|
||||||
|
{
|
||||||
|
m_db = storageCategory->db();
|
||||||
|
m_id = storageCategory->id();
|
||||||
|
m_parent = storageCategory->parent();
|
||||||
|
m_name = storageCategory->name();
|
||||||
|
m_description = storageCategory->description();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageCategory::setID(const qint32& id)
|
||||||
|
{
|
||||||
|
m_id = id;
|
||||||
|
m_changed = true;
|
||||||
|
emit idChanged(id);
|
||||||
|
emit storageCategoryChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
qint32 cStorageCategory::id()
|
||||||
|
{
|
||||||
|
return(m_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageCategory::setParent(const qint32& parent)
|
||||||
|
{
|
||||||
|
m_parent = parent;
|
||||||
|
m_changed = true;
|
||||||
|
emit parentChanged(parent);
|
||||||
|
emit storageCategoryChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
qint32 cStorageCategory::parent()
|
||||||
|
{
|
||||||
|
return(m_parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageCategory::addStorage(cStorage* storage)
|
||||||
|
{
|
||||||
|
m_storageList->add(storage);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageList* cStorageCategory::storageList()
|
||||||
|
{
|
||||||
|
return(m_storageList);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageCategory::setName(const QString& name)
|
||||||
|
{
|
||||||
|
m_name = name;
|
||||||
|
m_changed = true;
|
||||||
|
emit nameChanged(name);
|
||||||
|
emit storageCategoryChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cStorageCategory::name()
|
||||||
|
{
|
||||||
|
return(m_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageCategory::setDescription(const QString &description)
|
||||||
|
{
|
||||||
|
m_description = description;
|
||||||
|
m_changed = true;
|
||||||
|
emit descriptionChanged(description);
|
||||||
|
emit storageCategoryChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cStorageCategory::description()
|
||||||
|
{
|
||||||
|
return(m_description);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageCategory::setParentCategory(cStorageCategory* parentCategory)
|
||||||
|
{
|
||||||
|
m_parentCategory = parentCategory;
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageCategory* cStorageCategory::parentCategory()
|
||||||
|
{
|
||||||
|
return(m_parentCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageCategory::setItem(QStandardItem* item)
|
||||||
|
{
|
||||||
|
m_item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStandardItem* cStorageCategory::item()
|
||||||
|
{
|
||||||
|
return(m_item);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageCategoryList* cStorageCategory::childList()
|
||||||
|
{
|
||||||
|
return(m_childList);
|
||||||
|
}
|
||||||
|
|
||||||
|
cDatabase* cStorageCategory::db()
|
||||||
|
{
|
||||||
|
return(m_db);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorageCategory::save()
|
||||||
|
{
|
||||||
|
if(!m_changed)
|
||||||
|
return(true);
|
||||||
|
|
||||||
|
QSqlQuery query;
|
||||||
|
|
||||||
|
if(m_id == -1)
|
||||||
|
query.prepare("INSERT INTO storage_category (parent, name, description) VALUES (:parent, :name, :description);");
|
||||||
|
else
|
||||||
|
query.prepare("UPDATE storage_category SET parent=:parent, name=:name, description=:description WHERE id=:id;");
|
||||||
|
|
||||||
|
query.bindValue(":id", m_id);
|
||||||
|
query.bindValue(":parent", (m_parent==-1)?QVariant(QVariant::Int):m_parent);
|
||||||
|
query.bindValue(":name", m_name);
|
||||||
|
query.bindValue(":description", m_description);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_id == -1)
|
||||||
|
{
|
||||||
|
if(!query.exec("SELECT MAX(id) MAXID FROM storage_category;"))
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
query.first();
|
||||||
|
m_id = query.value("MAXID").toInt();
|
||||||
|
}
|
||||||
|
m_changed = false;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorageCategory::remove()
|
||||||
|
{
|
||||||
|
QSqlQuery query;
|
||||||
|
|
||||||
|
query.prepare("DELETE FROM storage_category WHERE id=:id;");
|
||||||
|
query.bindValue(":id", m_id);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageCategory::clearSave()
|
||||||
|
{
|
||||||
|
m_changed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageCategoryList::cStorageCategoryList(cDatabase* db, QObject* parent) :
|
||||||
|
QObject(parent),
|
||||||
|
m_db(db)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorageCategoryList::load()
|
||||||
|
{
|
||||||
|
if(!m_db->db().isOpen())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
QString sql = QString("SELECT id, "
|
||||||
|
" parent, "
|
||||||
|
" name, "
|
||||||
|
" description "
|
||||||
|
"FROM storage_category "
|
||||||
|
"ORDER BY parent, "
|
||||||
|
" id;");
|
||||||
|
QSqlQuery query(m_db->db());
|
||||||
|
|
||||||
|
query.prepare(sql);
|
||||||
|
|
||||||
|
if(!query.exec())
|
||||||
|
{
|
||||||
|
myDebug << query.lastError().text();
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
while(query.next())
|
||||||
|
{
|
||||||
|
cStorageCategory* lpCategory = new cStorageCategory(m_db, query.value("id").toInt());
|
||||||
|
if(query.value("parent").isNull())
|
||||||
|
lpCategory->setParent(-1);
|
||||||
|
else
|
||||||
|
lpCategory->setParent(query.value("parent").toInt());
|
||||||
|
lpCategory->setName(query.value("name").toString());
|
||||||
|
lpCategory->setDescription(query.value("description").toString());
|
||||||
|
|
||||||
|
cStorageCategory* lpParent = find(lpCategory->parent());
|
||||||
|
|
||||||
|
if(lpParent)
|
||||||
|
{
|
||||||
|
lpCategory->setParentCategory(lpParent);
|
||||||
|
lpParent->childList()->add(lpCategory);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
add(lpCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
sort();
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageCategory* cStorageCategoryList::add(const qint32& id)
|
||||||
|
{
|
||||||
|
cStorageCategory* lpNew = find(id);
|
||||||
|
|
||||||
|
if(!lpNew)
|
||||||
|
{
|
||||||
|
lpNew = new cStorageCategory(m_db, id);
|
||||||
|
append(lpNew);
|
||||||
|
emit storageCategoryAdded(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageCategory* cStorageCategoryList::add(const QString& name)
|
||||||
|
{
|
||||||
|
cStorageCategory* lpNew = new cStorageCategory(m_db);
|
||||||
|
lpNew->setName(name);
|
||||||
|
append(lpNew);
|
||||||
|
emit storageCategoryAdded(lpNew);
|
||||||
|
|
||||||
|
return(lpNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageCategoryList::add(cStorageCategory* storageCategory)
|
||||||
|
{
|
||||||
|
append(storageCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorageCategoryList::remove(const qint32& id)
|
||||||
|
{
|
||||||
|
cStorageCategory* storageCategory = find(id);
|
||||||
|
if(!storageCategory)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!storageCategory->remove())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!removeOne(storageCategory))
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
emit storageCategoryRemoved(storageCategory);
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageCategory* cStorageCategoryList::find(const qint32& id)
|
||||||
|
{
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(at(i)->id() == id)
|
||||||
|
return(at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageCategory* category;
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
category = at(i)->childList()->find(id);
|
||||||
|
if(category)
|
||||||
|
return(category);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageCategory* cStorageCategoryList::find(const QString& name)
|
||||||
|
{
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(at(i)->name() == name)
|
||||||
|
return(at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
cStorageCategory* category;
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
category = at(i)->childList()->find(name);
|
||||||
|
if(category)
|
||||||
|
return(category);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStorageCategoryList::sort()
|
||||||
|
{
|
||||||
|
std::sort(begin(), end(), sortAsc);
|
||||||
|
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
at(i)->childList()->sort();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorageCategoryList::fillList(QStandardItemModel* model, QStandardItem* parent)
|
||||||
|
{
|
||||||
|
if(!parent)
|
||||||
|
model->clear();
|
||||||
|
|
||||||
|
if(!count())
|
||||||
|
return(true);
|
||||||
|
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
QStandardItem* item = new QStandardItem;
|
||||||
|
at(i)->setItem(item);
|
||||||
|
item->setText(at(i)->name());
|
||||||
|
item->setData(QVariant::fromValue(at(i)), ITEM_STORAGE_CATEGORY_DATA);
|
||||||
|
|
||||||
|
if(parent)
|
||||||
|
parent->appendRow(item);
|
||||||
|
else
|
||||||
|
model->appendRow(item);
|
||||||
|
|
||||||
|
if(at(i)->childList())
|
||||||
|
at(i)->childList()->fillList(model, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cStorageCategoryList::save()
|
||||||
|
{
|
||||||
|
bool ret = true;
|
||||||
|
|
||||||
|
for(int i = 0;i < count();i++)
|
||||||
|
{
|
||||||
|
if(!at(i)->save())
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
#ifndef CSTORAGECATEGORY_H
|
||||||
|
#define CSTORAGECATEGORY_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "cdatabase.h"
|
||||||
|
|
||||||
|
#include <QMetaType>
|
||||||
|
#include <QList>
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include <QStandardItem>
|
||||||
|
#include <QStandardItemModel>
|
||||||
|
|
||||||
|
|
||||||
|
class cStorageCategoryList;
|
||||||
|
class cStorage;
|
||||||
|
class cStorageList;
|
||||||
|
|
||||||
|
class cStorageCategory : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit cStorageCategory(cDatabase* db, qint32 id = -1, QObject *parent = nullptr);
|
||||||
|
cStorageCategory(cStorageCategory* storageCategory);
|
||||||
|
|
||||||
|
void set(cStorageCategory* storageCategory);
|
||||||
|
|
||||||
|
void setID(const qint32& id);
|
||||||
|
qint32 id();
|
||||||
|
|
||||||
|
void setParent(const qint32& parent);
|
||||||
|
qint32 parent();
|
||||||
|
|
||||||
|
void setName(const QString& name);
|
||||||
|
QString name();
|
||||||
|
|
||||||
|
void setDescription(const QString& description);
|
||||||
|
QString description();
|
||||||
|
|
||||||
|
void setParentCategory(cStorageCategory* parentCategory);
|
||||||
|
cStorageCategory* parentCategory();
|
||||||
|
|
||||||
|
void addStorage(cStorage* storage);
|
||||||
|
cStorageList* storageList();
|
||||||
|
|
||||||
|
void setItem(QStandardItem* item);
|
||||||
|
QStandardItem* item();
|
||||||
|
|
||||||
|
bool save();
|
||||||
|
void clearSave();
|
||||||
|
bool remove();
|
||||||
|
|
||||||
|
void setList(cStorageCategoryList* list);
|
||||||
|
cStorageCategoryList* list();
|
||||||
|
|
||||||
|
cStorageCategoryList* childList();
|
||||||
|
|
||||||
|
cDatabase* db();
|
||||||
|
private:
|
||||||
|
cDatabase* m_db;
|
||||||
|
bool m_changed;
|
||||||
|
qint32 m_id;
|
||||||
|
qint32 m_parent;
|
||||||
|
QString m_name;
|
||||||
|
QString m_description;
|
||||||
|
cStorageCategory* m_parentCategory;
|
||||||
|
cStorageCategoryList* m_list;
|
||||||
|
cStorageCategoryList* m_childList;
|
||||||
|
cStorageList* m_storageList;
|
||||||
|
QStandardItem* m_item;
|
||||||
|
signals:
|
||||||
|
void storageCategoryChanged(cStorageCategory* storageCategory);
|
||||||
|
void idChanged(const qint32& id);
|
||||||
|
void parentChanged(const qint32& parent);
|
||||||
|
void nameChanged(const QString& name);
|
||||||
|
void descriptionChanged(const QString& description);
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(cStorageCategory*)
|
||||||
|
|
||||||
|
class cStorageCategoryList : public QObject, public QList<cStorageCategory*>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
cStorageCategoryList(cDatabase* db, QObject* parent = nullptr);
|
||||||
|
|
||||||
|
bool load();
|
||||||
|
cStorageCategory* add(const qint32& id);
|
||||||
|
cStorageCategory* add(const QString& name);
|
||||||
|
void add(cStorageCategory* storageCategory);
|
||||||
|
bool remove(const qint32& id);
|
||||||
|
cStorageCategory* find(const qint32& id);
|
||||||
|
cStorageCategory* find(const QString& name);
|
||||||
|
|
||||||
|
void sort();
|
||||||
|
|
||||||
|
bool fillList(QStandardItemModel* model, QStandardItem* parent = 0);
|
||||||
|
|
||||||
|
bool save();
|
||||||
|
private:
|
||||||
|
cDatabase* m_db;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void storageCategoryAdded(cStorageCategory* storageCategory);
|
||||||
|
void storageCategoryRemoved(cStorageCategory* storageCategory);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CSTORAGECATEGORY_H
|
||||||
+51
@@ -0,0 +1,51 @@
|
|||||||
|
/*!
|
||||||
|
\file cwidget.cpp
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "cwidget.h"
|
||||||
|
|
||||||
|
|
||||||
|
cWidget::cWidget(cManufacturerWindow* parent) :
|
||||||
|
QWidget(parent),
|
||||||
|
m_type(TYPE_manufacturer),
|
||||||
|
m_lpWidget(parent),
|
||||||
|
m_lpWindow(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
cWidget::cWidget(cDistributorWindow* parent) :
|
||||||
|
QWidget(parent),
|
||||||
|
m_type(TYPE_distributor),
|
||||||
|
m_lpWidget(parent),
|
||||||
|
m_lpWindow(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
cWidget::cWidget(QWidget* parent) :
|
||||||
|
QWidget(parent),
|
||||||
|
m_type(TYPE_unknown),
|
||||||
|
m_lpWidget(parent),
|
||||||
|
m_lpWindow(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void cWidget::setWindow(QMdiSubWindow* lpWindow)
|
||||||
|
{
|
||||||
|
m_lpWindow = lpWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMdiSubWindow* cWidget::window()
|
||||||
|
{
|
||||||
|
return(m_lpWindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget* cWidget::widget()
|
||||||
|
{
|
||||||
|
return(m_lpWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
cWidget::TYPE cWidget::type()
|
||||||
|
{
|
||||||
|
return(m_type);
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
#ifndef CWIDGET_H
|
||||||
|
#define CWIDGET_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "cmanufacturerwindow.h"
|
||||||
|
#include "cdistributorwindow.h"
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QMdiSubWindow>
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\class cWidget cwidget.h "cwidget.h"
|
||||||
|
*/
|
||||||
|
class cWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
|
||||||
|
\enum TYPE
|
||||||
|
*/
|
||||||
|
enum TYPE
|
||||||
|
{
|
||||||
|
TYPE_unknown = 0,
|
||||||
|
TYPE_manufacturer = 1,
|
||||||
|
TYPE_distributor = 2,
|
||||||
|
TYPE_storage = 3,
|
||||||
|
TYPE_part = 4,
|
||||||
|
TYPE_project = 5,
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit cWidget(cManufacturerWindow* parent);
|
||||||
|
explicit cWidget(cDistributorWindow* parent);
|
||||||
|
explicit cWidget(QWidget* parent);
|
||||||
|
|
||||||
|
QWidget* widget();
|
||||||
|
|
||||||
|
void setWindow(QMdiSubWindow* lpWindow);
|
||||||
|
QMdiSubWindow* window();
|
||||||
|
TYPE type();
|
||||||
|
signals:
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
private:
|
||||||
|
TYPE m_type;
|
||||||
|
QWidget* m_lpWidget;
|
||||||
|
QMdiSubWindow* m_lpWindow;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CWIDGET_H
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,41 @@
|
|||||||
|
#include "cmainwindow.h"
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
#include "csplashscreen.h"
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
|
||||||
|
a.setApplicationVersion(APP_VERSION);
|
||||||
|
a.setApplicationDisplayName("partlistManager");
|
||||||
|
a.setOrganizationName("WIN-DESIGN");
|
||||||
|
a.setOrganizationDomain("windesign.at");
|
||||||
|
a.setApplicationName("partlistManager");
|
||||||
|
|
||||||
|
QSettings settings;
|
||||||
|
|
||||||
|
QPixmap pixmap(":/images/splash.png");
|
||||||
|
QFont splashFont;
|
||||||
|
cSplashScreen* lpSplash = new cSplashScreen(pixmap, splashFont);
|
||||||
|
|
||||||
|
lpSplash->show();
|
||||||
|
a.processEvents();
|
||||||
|
|
||||||
|
lpSplash->showStatusMessage(QObject::tr("<center>initializing...</denter>"));
|
||||||
|
|
||||||
|
cMainWindow w(lpSplash);
|
||||||
|
|
||||||
|
if(settings.value("main/maximized").toBool())
|
||||||
|
w.showMaximized();
|
||||||
|
else
|
||||||
|
w.show();
|
||||||
|
|
||||||
|
lpSplash->finish(&w);
|
||||||
|
delete lpSplash;
|
||||||
|
|
||||||
|
return a.exec();
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
VERSION = "0.0.1.0"
|
||||||
|
|
||||||
|
QMAKE_TARGET_COMPANY = "WIN-DESIGN"
|
||||||
|
QMAKE_TARGET_PRODUCT = "partlistManager"
|
||||||
|
QMAKE_TARGET_DESCRIPTION = "partlistManager"
|
||||||
|
QMAKE_TARGET_COPYRIGHT = "(c) 2019 WIN-DESIGN"
|
||||||
|
QMAKE_TARGET_DOMAIN = "windesign.at"
|
||||||
|
|
||||||
|
QT += core gui sql
|
||||||
|
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
|
win32-msvc* {
|
||||||
|
contains(QT_ARCH, i386) {
|
||||||
|
message("msvc 32-bit")
|
||||||
|
} else {
|
||||||
|
message("msvc 64-bit")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
win32-g++ {
|
||||||
|
message("mingw")
|
||||||
|
}
|
||||||
|
|
||||||
|
unix {
|
||||||
|
message("*nix")
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG += c++11
|
||||||
|
|
||||||
|
# You can make your code fail to compile if it uses deprecated APIs.
|
||||||
|
# In order to do so, uncomment the following line.
|
||||||
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
|
DEFINES += APP_VERSION=\\\"$$VERSION\\\"
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
cdatabase.cpp \
|
||||||
|
cdistributor.cpp \
|
||||||
|
cdistributorwindow.cpp \
|
||||||
|
cmanufacturer.cpp \
|
||||||
|
cmanufacturerwindow.cpp \
|
||||||
|
cmdisubwindow.cpp \
|
||||||
|
common.cpp \
|
||||||
|
csplashscreen.cpp \
|
||||||
|
cstorage.cpp \
|
||||||
|
cstoragecategory.cpp \
|
||||||
|
cwidget.cpp \
|
||||||
|
main.cpp \
|
||||||
|
cmainwindow.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
cdatabase.h \
|
||||||
|
cdistributor.h \
|
||||||
|
cdistributorwindow.h \
|
||||||
|
cmainwindow.h \
|
||||||
|
cmanufacturer.h \
|
||||||
|
cmanufacturerwindow.h \
|
||||||
|
cmdisubwindow.h \
|
||||||
|
common.h \
|
||||||
|
csplashscreen.h \
|
||||||
|
cstorage.h \
|
||||||
|
cstoragecategory.h \
|
||||||
|
cwidget.h
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
cdistributorwindow.ui \
|
||||||
|
cmainwindow.ui \
|
||||||
|
cmanufacturerwindow.ui
|
||||||
|
|
||||||
|
# Default rules for deployment.
|
||||||
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
||||||
|
|
||||||
|
RESOURCES += \
|
||||||
|
partlistmanager.qrc
|
||||||
@@ -0,0 +1,659 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/">
|
||||||
|
<file>images/splashEmpty.png</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="/icons/TangoMFK">
|
||||||
|
<file alias="16x16/address-book-new.png">themes/tango/16x16/actions/address-book-new.png</file>
|
||||||
|
<file alias="16x16/appointment-new.png">themes/tango/16x16/actions/appointment-new.png</file>
|
||||||
|
<file alias="16x16/bookmark-new.png">themes/tango/16x16/actions/bookmark-new.png</file>
|
||||||
|
<file alias="16x16/contact-new.png">themes/tango/16x16/actions/contact-new.png</file>
|
||||||
|
<file alias="16x16/document-new.png">themes/tango/16x16/actions/document-new.png</file>
|
||||||
|
<file alias="16x16/document-open.png">themes/tango/16x16/actions/document-open.png</file>
|
||||||
|
<file alias="16x16/document-print-preview.png">themes/tango/16x16/actions/document-print-preview.png</file>
|
||||||
|
<file alias="16x16/document-print.png">themes/tango/16x16/actions/document-print.png</file>
|
||||||
|
<file alias="16x16/document-pdf.png">themes/tango/16x16/actions/document-pdf.png</file>
|
||||||
|
<file alias="16x16/document-properties.png">themes/tango/16x16/actions/document-properties.png</file>
|
||||||
|
<file alias="16x16/document-revert.png">themes/tango/16x16/actions/document-revert.png</file>
|
||||||
|
<file alias="16x16/document-save-as.png">themes/tango/16x16/actions/document-save-as.png</file>
|
||||||
|
<file alias="16x16/document-save.png">themes/tango/16x16/actions/document-save.png</file>
|
||||||
|
<file alias="16x16/edit-clear.png">themes/tango/16x16/actions/edit-clear.png</file>
|
||||||
|
<file alias="16x16/edit-copy.png">themes/tango/16x16/actions/edit-copy.png</file>
|
||||||
|
<file alias="16x16/edit-cut.png">themes/tango/16x16/actions/edit-cut.png</file>
|
||||||
|
<file alias="16x16/edit-delete.png">themes/tango/16x16/actions/edit-delete.png</file>
|
||||||
|
<file alias="16x16/edit-find-replace.png">themes/tango/16x16/actions/edit-find-replace.png</file>
|
||||||
|
<file alias="16x16/edit-find.png">themes/tango/16x16/actions/edit-find.png</file>
|
||||||
|
<file alias="16x16/edit-paste.png">themes/tango/16x16/actions/edit-paste.png</file>
|
||||||
|
<file alias="16x16/edit-redo.png">themes/tango/16x16/actions/edit-redo.png</file>
|
||||||
|
<file alias="16x16/edit-select-all.png">themes/tango/16x16/actions/edit-select-all.png</file>
|
||||||
|
<file alias="16x16/edit-undo.png">themes/tango/16x16/actions/edit-undo.png</file>
|
||||||
|
<file alias="16x16/folder-new.png">themes/tango/16x16/actions/folder-new.png</file>
|
||||||
|
<file alias="16x16/format-indent-less.png">themes/tango/16x16/actions/format-indent-less.png</file>
|
||||||
|
<file alias="16x16/format-indent-more.png">themes/tango/16x16/actions/format-indent-more.png</file>
|
||||||
|
<file alias="16x16/format-justify-center.png">themes/tango/16x16/actions/format-justify-center.png</file>
|
||||||
|
<file alias="16x16/format-justify-fill.png">themes/tango/16x16/actions/format-justify-fill.png</file>
|
||||||
|
<file alias="16x16/format-justify-left.png">themes/tango/16x16/actions/format-justify-left.png</file>
|
||||||
|
<file alias="16x16/format-justify-right.png">themes/tango/16x16/actions/format-justify-right.png</file>
|
||||||
|
<file alias="16x16/format-text-bold.png">themes/tango/16x16/actions/format-text-bold.png</file>
|
||||||
|
<file alias="16x16/format-text-italic.png">themes/tango/16x16/actions/format-text-italic.png</file>
|
||||||
|
<file alias="16x16/format-text-strikethrough.png">themes/tango/16x16/actions/format-text-strikethrough.png</file>
|
||||||
|
<file alias="16x16/format-text-underline.png">themes/tango/16x16/actions/format-text-underline.png</file>
|
||||||
|
<file alias="16x16/go-bottom.png">themes/tango/16x16/actions/go-bottom.png</file>
|
||||||
|
<file alias="16x16/go-down.png">themes/tango/16x16/actions/go-down.png</file>
|
||||||
|
<file alias="16x16/go-first.png">themes/tango/16x16/actions/go-first.png</file>
|
||||||
|
<file alias="16x16/go-home.png">themes/tango/16x16/actions/go-home.png</file>
|
||||||
|
<file alias="16x16/go-jump.png">themes/tango/16x16/actions/go-jump.png</file>
|
||||||
|
<file alias="16x16/go-last.png">themes/tango/16x16/actions/go-last.png</file>
|
||||||
|
<file alias="16x16/go-next.png">themes/tango/16x16/actions/go-next.png</file>
|
||||||
|
<file alias="16x16/go-previous.png">themes/tango/16x16/actions/go-previous.png</file>
|
||||||
|
<file alias="16x16/go-top.png">themes/tango/16x16/actions/go-top.png</file>
|
||||||
|
<file alias="16x16/go-up.png">themes/tango/16x16/actions/go-up.png</file>
|
||||||
|
<file alias="16x16/list-add.png">themes/tango/16x16/actions/list-add.png</file>
|
||||||
|
<file alias="16x16/list-remove.png">themes/tango/16x16/actions/list-remove.png</file>
|
||||||
|
<file alias="16x16/mail-forward.png">themes/tango/16x16/actions/mail-forward.png</file>
|
||||||
|
<file alias="16x16/mail-mark-junk.png">themes/tango/16x16/actions/mail-mark-junk.png</file>
|
||||||
|
<file alias="16x16/mail-mark-not-junk.png">themes/tango/16x16/actions/mail-mark-not-junk.png</file>
|
||||||
|
<file alias="16x16/mail-message-new.png">themes/tango/16x16/actions/mail-message-new.png</file>
|
||||||
|
<file alias="16x16/mail-reply-all.png">themes/tango/16x16/actions/mail-reply-all.png</file>
|
||||||
|
<file alias="16x16/mail-reply-sender.png">themes/tango/16x16/actions/mail-reply-sender.png</file>
|
||||||
|
<file alias="16x16/mail-send-receive.png">themes/tango/16x16/actions/mail-send-receive.png</file>
|
||||||
|
<file alias="16x16/media-eject.png">themes/tango/16x16/actions/media-eject.png</file>
|
||||||
|
<file alias="16x16/media-playback-pause.png">themes/tango/16x16/actions/media-playback-pause.png</file>
|
||||||
|
<file alias="16x16/media-playback-start.png">themes/tango/16x16/actions/media-playback-start.png</file>
|
||||||
|
<file alias="16x16/media-playback-stop.png">themes/tango/16x16/actions/media-playback-stop.png</file>
|
||||||
|
<file alias="16x16/media-record.png">themes/tango/16x16/actions/media-record.png</file>
|
||||||
|
<file alias="16x16/media-seek-backward.png">themes/tango/16x16/actions/media-seek-backward.png</file>
|
||||||
|
<file alias="16x16/media-seek-forward.png">themes/tango/16x16/actions/media-seek-forward.png</file>
|
||||||
|
<file alias="16x16/media-skip-backward.png">themes/tango/16x16/actions/media-skip-backward.png</file>
|
||||||
|
<file alias="16x16/media-skip-forward.png">themes/tango/16x16/actions/media-skip-forward.png</file>
|
||||||
|
<file alias="16x16/process-stop.png">themes/tango/16x16/actions/process-stop.png</file>
|
||||||
|
<file alias="16x16/system-lock-screen.png">themes/tango/16x16/actions/system-lock-screen.png</file>
|
||||||
|
<file alias="16x16/system-log-out.png">themes/tango/16x16/actions/system-log-out.png</file>
|
||||||
|
<file alias="16x16/system-search.png">themes/tango/16x16/actions/system-search.png</file>
|
||||||
|
<file alias="16x16/system-shutdown.png">themes/tango/16x16/actions/system-shutdown.png</file>
|
||||||
|
<file alias="16x16/tab-new.png">themes/tango/16x16/actions/tab-new.png</file>
|
||||||
|
<file alias="16x16/view-fullscreen.png">themes/tango/16x16/actions/view-fullscreen.png</file>
|
||||||
|
<file alias="16x16/view-refresh.png">themes/tango/16x16/actions/view-refresh.png</file>
|
||||||
|
<file alias="16x16/window-new.png">themes/tango/16x16/actions/window-new.png</file>
|
||||||
|
<file alias="16x16/process-working.png">themes/tango/16x16/animations/process-working.png</file>
|
||||||
|
<file alias="16x16/accessories-calculator.png">themes/tango/16x16/apps/accessories-calculator.png</file>
|
||||||
|
<file alias="16x16/accessories-character-map.png">themes/tango/16x16/apps/accessories-character-map.png</file>
|
||||||
|
<file alias="16x16/accessories-text-editor.png">themes/tango/16x16/apps/accessories-text-editor.png</file>
|
||||||
|
<file alias="16x16/help-browser.png">themes/tango/16x16/apps/help-browser.png</file>
|
||||||
|
<file alias="16x16/internet-group-chat.png">themes/tango/16x16/apps/internet-group-chat.png</file>
|
||||||
|
<file alias="16x16/internet-mail.png">themes/tango/16x16/apps/internet-mail.png</file>
|
||||||
|
<file alias="16x16/internet-news-reader.png">themes/tango/16x16/apps/internet-news-reader.png</file>
|
||||||
|
<file alias="16x16/internet-web-browser.png">themes/tango/16x16/apps/internet-web-browser.png</file>
|
||||||
|
<file alias="16x16/office-calendar.png">themes/tango/16x16/apps/office-calendar.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop-accessibility.png">themes/tango/16x16/apps/preferences-desktop-accessibility.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop-assistive-technology.png">themes/tango/16x16/apps/preferences-desktop-assistive-technology.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop-font.png">themes/tango/16x16/apps/preferences-desktop-font.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop-keyboard-shortcuts.png">themes/tango/16x16/apps/preferences-desktop-keyboard-shortcuts.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop-locale.png">themes/tango/16x16/apps/preferences-desktop-locale.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop-multimedia.png">themes/tango/16x16/apps/preferences-desktop-multimedia.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop-remote-desktop.png">themes/tango/16x16/apps/preferences-desktop-remote-desktop.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop-screensaver.png">themes/tango/16x16/apps/preferences-desktop-screensaver.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop-theme.png">themes/tango/16x16/apps/preferences-desktop-theme.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop-wallpaper.png">themes/tango/16x16/apps/preferences-desktop-wallpaper.png</file>
|
||||||
|
<file alias="16x16/preferences-system-network-proxy.png">themes/tango/16x16/apps/preferences-system-network-proxy.png</file>
|
||||||
|
<file alias="16x16/preferences-system-session.png">themes/tango/16x16/apps/preferences-system-session.png</file>
|
||||||
|
<file alias="16x16/preferences-system-windows.png">themes/tango/16x16/apps/preferences-system-windows.png</file>
|
||||||
|
<file alias="16x16/system-file-manager.png">themes/tango/16x16/apps/system-file-manager.png</file>
|
||||||
|
<file alias="16x16/system-installer.png">themes/tango/16x16/apps/system-installer.png</file>
|
||||||
|
<file alias="16x16/system-software-update.png">themes/tango/16x16/apps/system-software-update.png</file>
|
||||||
|
<file alias="16x16/system-users.png">themes/tango/16x16/apps/system-users.png</file>
|
||||||
|
<file alias="16x16/utilities-system-monitor.png">themes/tango/16x16/apps/utilities-system-monitor.png</file>
|
||||||
|
<file alias="16x16/utilities-terminal.png">themes/tango/16x16/apps/utilities-terminal.png</file>
|
||||||
|
<file alias="16x16/applications-accessories.png">themes/tango/16x16/categories/applications-accessories.png</file>
|
||||||
|
<file alias="16x16/applications-development.png">themes/tango/16x16/categories/applications-development.png</file>
|
||||||
|
<file alias="16x16/applications-games.png">themes/tango/16x16/categories/applications-games.png</file>
|
||||||
|
<file alias="16x16/applications-graphics.png">themes/tango/16x16/categories/applications-graphics.png</file>
|
||||||
|
<file alias="16x16/applications-internet.png">themes/tango/16x16/categories/applications-internet.png</file>
|
||||||
|
<file alias="16x16/applications-multimedia.png">themes/tango/16x16/categories/applications-multimedia.png</file>
|
||||||
|
<file alias="16x16/applications-office.png">themes/tango/16x16/categories/applications-office.png</file>
|
||||||
|
<file alias="16x16/applications-other.png">themes/tango/16x16/categories/applications-other.png</file>
|
||||||
|
<file alias="16x16/applications-system.png">themes/tango/16x16/categories/applications-system.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop-peripherals.png">themes/tango/16x16/categories/preferences-desktop-peripherals.png</file>
|
||||||
|
<file alias="16x16/preferences-desktop.png">themes/tango/16x16/categories/preferences-desktop.png</file>
|
||||||
|
<file alias="16x16/preferences-system.png">themes/tango/16x16/categories/preferences-system.png</file>
|
||||||
|
<file alias="16x16/audio-card.png">themes/tango/16x16/devices/audio-card.png</file>
|
||||||
|
<file alias="16x16/audio-input-microphone.png">themes/tango/16x16/devices/audio-input-microphone.png</file>
|
||||||
|
<file alias="16x16/battery.png">themes/tango/16x16/devices/battery.png</file>
|
||||||
|
<file alias="16x16/camera-photo.png">themes/tango/16x16/devices/camera-photo.png</file>
|
||||||
|
<file alias="16x16/camera-video.png">themes/tango/16x16/devices/camera-video.png</file>
|
||||||
|
<file alias="16x16/computer.png">themes/tango/16x16/devices/computer.png</file>
|
||||||
|
<file alias="16x16/drive-harddisk.png">themes/tango/16x16/devices/drive-harddisk.png</file>
|
||||||
|
<file alias="16x16/drive-optical.png">themes/tango/16x16/devices/drive-optical.png</file>
|
||||||
|
<file alias="16x16/drive-removable-media.png">themes/tango/16x16/devices/drive-removable-media.png</file>
|
||||||
|
<file alias="16x16/input-gaming.png">themes/tango/16x16/devices/input-gaming.png</file>
|
||||||
|
<file alias="16x16/input-keyboard.png">themes/tango/16x16/devices/input-keyboard.png</file>
|
||||||
|
<file alias="16x16/input-mouse.png">themes/tango/16x16/devices/input-mouse.png</file>
|
||||||
|
<file alias="16x16/media-flash.png">themes/tango/16x16/devices/media-flash.png</file>
|
||||||
|
<file alias="16x16/media-floppy.png">themes/tango/16x16/devices/media-floppy.png</file>
|
||||||
|
<file alias="16x16/media-optical.png">themes/tango/16x16/devices/media-optical.png</file>
|
||||||
|
<file alias="16x16/multimedia-player.png">themes/tango/16x16/devices/multimedia-player.png</file>
|
||||||
|
<file alias="16x16/network-wired.png">themes/tango/16x16/devices/network-wired.png</file>
|
||||||
|
<file alias="16x16/network-wireless.png">themes/tango/16x16/devices/network-wireless.png</file>
|
||||||
|
<file alias="16x16/printer.png">themes/tango/16x16/devices/printer.png</file>
|
||||||
|
<file alias="16x16/video-display.png">themes/tango/16x16/devices/video-display.png</file>
|
||||||
|
<file alias="16x16/emblem-favorite.png">themes/tango/16x16/emblems/emblem-favorite.png</file>
|
||||||
|
<file alias="16x16/emblem-important.png">themes/tango/16x16/emblems/emblem-important.png</file>
|
||||||
|
<file alias="16x16/emblem-photos.png">themes/tango/16x16/emblems/emblem-photos.png</file>
|
||||||
|
<file alias="16x16/emblem-readonly.png">themes/tango/16x16/emblems/emblem-readonly.png</file>
|
||||||
|
<file alias="16x16/emblem-symbolic-link.png">themes/tango/16x16/emblems/emblem-symbolic-link.png</file>
|
||||||
|
<file alias="16x16/emblem-system.png">themes/tango/16x16/emblems/emblem-system.png</file>
|
||||||
|
<file alias="16x16/emblem-unreadable.png">themes/tango/16x16/emblems/emblem-unreadable.png</file>
|
||||||
|
<file alias="16x16/face-angel.png">themes/tango/16x16/emotes/face-angel.png</file>
|
||||||
|
<file alias="16x16/face-crying.png">themes/tango/16x16/emotes/face-crying.png</file>
|
||||||
|
<file alias="16x16/face-devilish.png">themes/tango/16x16/emotes/face-devilish.png</file>
|
||||||
|
<file alias="16x16/face-glasses.png">themes/tango/16x16/emotes/face-glasses.png</file>
|
||||||
|
<file alias="16x16/face-grin.png">themes/tango/16x16/emotes/face-grin.png</file>
|
||||||
|
<file alias="16x16/face-kiss.png">themes/tango/16x16/emotes/face-kiss.png</file>
|
||||||
|
<file alias="16x16/face-monkey.png">themes/tango/16x16/emotes/face-monkey.png</file>
|
||||||
|
<file alias="16x16/face-plain.png">themes/tango/16x16/emotes/face-plain.png</file>
|
||||||
|
<file alias="16x16/face-sad.png">themes/tango/16x16/emotes/face-sad.png</file>
|
||||||
|
<file alias="16x16/face-smile-big.png">themes/tango/16x16/emotes/face-smile-big.png</file>
|
||||||
|
<file alias="16x16/face-smile.png">themes/tango/16x16/emotes/face-smile.png</file>
|
||||||
|
<file alias="16x16/face-surprise.png">themes/tango/16x16/emotes/face-surprise.png</file>
|
||||||
|
<file alias="16x16/face-wink.png">themes/tango/16x16/emotes/face-wink.png</file>
|
||||||
|
<file alias="16x16/application-certificate.png">themes/tango/16x16/mimetypes/application-certificate.png</file>
|
||||||
|
<file alias="16x16/application-x-executable.png">themes/tango/16x16/mimetypes/application-x-executable.png</file>
|
||||||
|
<file alias="16x16/audio-x-generic.png">themes/tango/16x16/mimetypes/audio-x-generic.png</file>
|
||||||
|
<file alias="16x16/font-x-generic.png">themes/tango/16x16/mimetypes/font-x-generic.png</file>
|
||||||
|
<file alias="16x16/image-x-generic.png">themes/tango/16x16/mimetypes/image-x-generic.png</file>
|
||||||
|
<file alias="16x16/package-x-generic.png">themes/tango/16x16/mimetypes/package-x-generic.png</file>
|
||||||
|
<file alias="16x16/text-html.png">themes/tango/16x16/mimetypes/text-html.png</file>
|
||||||
|
<file alias="16x16/text-x-generic-template.png">themes/tango/16x16/mimetypes/text-x-generic-template.png</file>
|
||||||
|
<file alias="16x16/text-x-generic.png">themes/tango/16x16/mimetypes/text-x-generic.png</file>
|
||||||
|
<file alias="16x16/text-x-script.png">themes/tango/16x16/mimetypes/text-x-script.png</file>
|
||||||
|
<file alias="16x16/video-x-generic.png">themes/tango/16x16/mimetypes/video-x-generic.png</file>
|
||||||
|
<file alias="16x16/x-office-address-book.png">themes/tango/16x16/mimetypes/x-office-address-book.png</file>
|
||||||
|
<file alias="16x16/x-office-calendar.png">themes/tango/16x16/mimetypes/x-office-calendar.png</file>
|
||||||
|
<file alias="16x16/x-office-document-template.png">themes/tango/16x16/mimetypes/x-office-document-template.png</file>
|
||||||
|
<file alias="16x16/x-office-document.png">themes/tango/16x16/mimetypes/x-office-document.png</file>
|
||||||
|
<file alias="16x16/x-office-drawing-template.png">themes/tango/16x16/mimetypes/x-office-drawing-template.png</file>
|
||||||
|
<file alias="16x16/x-office-drawing.png">themes/tango/16x16/mimetypes/x-office-drawing.png</file>
|
||||||
|
<file alias="16x16/x-office-presentation-template.png">themes/tango/16x16/mimetypes/x-office-presentation-template.png</file>
|
||||||
|
<file alias="16x16/x-office-presentation.png">themes/tango/16x16/mimetypes/x-office-presentation.png</file>
|
||||||
|
<file alias="16x16/x-office-spreadsheet-template.png">themes/tango/16x16/mimetypes/x-office-spreadsheet-template.png</file>
|
||||||
|
<file alias="16x16/x-office-spreadsheet.png">themes/tango/16x16/mimetypes/x-office-spreadsheet.png</file>
|
||||||
|
<file alias="16x16/folder-remote.png">themes/tango/16x16/places/folder-remote.png</file>
|
||||||
|
<file alias="16x16/folder-saved-search.png">themes/tango/16x16/places/folder-saved-search.png</file>
|
||||||
|
<file alias="16x16/folder.png">themes/tango/16x16/places/folder.png</file>
|
||||||
|
<file alias="16x16/network-server.png">themes/tango/16x16/places/network-server.png</file>
|
||||||
|
<file alias="16x16/network-workgroup.png">themes/tango/16x16/places/network-workgroup.png</file>
|
||||||
|
<file alias="16x16/start-here.png">themes/tango/16x16/places/start-here.png</file>
|
||||||
|
<file alias="16x16/user-desktop.png">themes/tango/16x16/places/user-desktop.png</file>
|
||||||
|
<file alias="16x16/user-home.png">themes/tango/16x16/places/user-home.png</file>
|
||||||
|
<file alias="16x16/user-trash.png">themes/tango/16x16/places/user-trash.png</file>
|
||||||
|
<file alias="16x16/audio-volume-high.png">themes/tango/16x16/status/audio-volume-high.png</file>
|
||||||
|
<file alias="16x16/audio-volume-low.png">themes/tango/16x16/status/audio-volume-low.png</file>
|
||||||
|
<file alias="16x16/audio-volume-medium.png">themes/tango/16x16/status/audio-volume-medium.png</file>
|
||||||
|
<file alias="16x16/audio-volume-muted.png">themes/tango/16x16/status/audio-volume-muted.png</file>
|
||||||
|
<file alias="16x16/battery-caution.png">themes/tango/16x16/status/battery-caution.png</file>
|
||||||
|
<file alias="16x16/dialog-error.png">themes/tango/16x16/status/dialog-error.png</file>
|
||||||
|
<file alias="16x16/dialog-information.png">themes/tango/16x16/status/dialog-information.png</file>
|
||||||
|
<file alias="16x16/dialog-warning.png">themes/tango/16x16/status/dialog-warning.png</file>
|
||||||
|
<file alias="16x16/folder-drag-accept.png">themes/tango/16x16/status/folder-drag-accept.png</file>
|
||||||
|
<file alias="16x16/folder-open.png">themes/tango/16x16/status/folder-open.png</file>
|
||||||
|
<file alias="16x16/folder-visiting.png">themes/tango/16x16/status/folder-visiting.png</file>
|
||||||
|
<file alias="16x16/image-loading.png">themes/tango/16x16/status/image-loading.png</file>
|
||||||
|
<file alias="16x16/image-missing.png">themes/tango/16x16/status/image-missing.png</file>
|
||||||
|
<file alias="16x16/mail-attachment.png">themes/tango/16x16/status/mail-attachment.png</file>
|
||||||
|
<file alias="16x16/network-error.png">themes/tango/16x16/status/network-error.png</file>
|
||||||
|
<file alias="16x16/network-idle.png">themes/tango/16x16/status/network-idle.png</file>
|
||||||
|
<file alias="16x16/network-offline.png">themes/tango/16x16/status/network-offline.png</file>
|
||||||
|
<file alias="16x16/network-receive.png">themes/tango/16x16/status/network-receive.png</file>
|
||||||
|
<file alias="16x16/network-transmit-receive.png">themes/tango/16x16/status/network-transmit-receive.png</file>
|
||||||
|
<file alias="16x16/network-transmit.png">themes/tango/16x16/status/network-transmit.png</file>
|
||||||
|
<file alias="16x16/network-wireless-encrypted.png">themes/tango/16x16/status/network-wireless-encrypted.png</file>
|
||||||
|
<file alias="16x16/printer-error.png">themes/tango/16x16/status/printer-error.png</file>
|
||||||
|
<file alias="16x16/software-update-available.png">themes/tango/16x16/status/software-update-available.png</file>
|
||||||
|
<file alias="16x16/software-update-urgent.png">themes/tango/16x16/status/software-update-urgent.png</file>
|
||||||
|
<file alias="16x16/user-trash-full.png">themes/tango/16x16/status/user-trash-full.png</file>
|
||||||
|
<file alias="16x16/weather-clear-night.png">themes/tango/16x16/status/weather-clear-night.png</file>
|
||||||
|
<file alias="16x16/weather-clear.png">themes/tango/16x16/status/weather-clear.png</file>
|
||||||
|
<file alias="16x16/weather-few-clouds-night.png">themes/tango/16x16/status/weather-few-clouds-night.png</file>
|
||||||
|
<file alias="16x16/weather-few-clouds.png">themes/tango/16x16/status/weather-few-clouds.png</file>
|
||||||
|
<file alias="16x16/weather-overcast.png">themes/tango/16x16/status/weather-overcast.png</file>
|
||||||
|
<file alias="16x16/weather-severe-alert.png">themes/tango/16x16/status/weather-severe-alert.png</file>
|
||||||
|
<file alias="16x16/weather-showers-scattered.png">themes/tango/16x16/status/weather-showers-scattered.png</file>
|
||||||
|
<file alias="16x16/weather-showers.png">themes/tango/16x16/status/weather-showers.png</file>
|
||||||
|
<file alias="16x16/weather-snow.png">themes/tango/16x16/status/weather-snow.png</file>
|
||||||
|
<file alias="16x16/weather-storm.png">themes/tango/16x16/status/weather-storm.png</file>
|
||||||
|
<file alias="22x22/address-book-new.png">themes/tango/22x22/actions/address-book-new.png</file>
|
||||||
|
<file alias="22x22/appointment-new.png">themes/tango/22x22/actions/appointment-new.png</file>
|
||||||
|
<file alias="22x22/bookmark-new.png">themes/tango/22x22/actions/bookmark-new.png</file>
|
||||||
|
<file alias="22x22/contact-new.png">themes/tango/22x22/actions/contact-new.png</file>
|
||||||
|
<file alias="22x22/document-new.png">themes/tango/22x22/actions/document-new.png</file>
|
||||||
|
<file alias="22x22/document-open.png">themes/tango/22x22/actions/document-open.png</file>
|
||||||
|
<file alias="22x22/document-print-preview.png">themes/tango/22x22/actions/document-print-preview.png</file>
|
||||||
|
<file alias="22x22/document-print.png">themes/tango/22x22/actions/document-print.png</file>
|
||||||
|
<file alias="22x22/document-pdf.png">themes/tango/22x22/actions/document-pdf.png</file>
|
||||||
|
<file alias="22x22/document-properties.png">themes/tango/22x22/actions/document-properties.png</file>
|
||||||
|
<file alias="22x22/document-revert.png">themes/tango/22x22/actions/document-revert.png</file>
|
||||||
|
<file alias="22x22/document-save-as.png">themes/tango/22x22/actions/document-save-as.png</file>
|
||||||
|
<file alias="22x22/document-save.png">themes/tango/22x22/actions/document-save.png</file>
|
||||||
|
<file alias="22x22/edit-clear.png">themes/tango/22x22/actions/edit-clear.png</file>
|
||||||
|
<file alias="22x22/edit-copy.png">themes/tango/22x22/actions/edit-copy.png</file>
|
||||||
|
<file alias="22x22/edit-cut.png">themes/tango/22x22/actions/edit-cut.png</file>
|
||||||
|
<file alias="22x22/edit-delete.png">themes/tango/22x22/actions/edit-delete.png</file>
|
||||||
|
<file alias="22x22/edit-find-replace.png">themes/tango/22x22/actions/edit-find-replace.png</file>
|
||||||
|
<file alias="22x22/edit-find.png">themes/tango/22x22/actions/edit-find.png</file>
|
||||||
|
<file alias="22x22/edit-paste.png">themes/tango/22x22/actions/edit-paste.png</file>
|
||||||
|
<file alias="22x22/edit-redo.png">themes/tango/22x22/actions/edit-redo.png</file>
|
||||||
|
<file alias="22x22/edit-select-all.png">themes/tango/22x22/actions/edit-select-all.png</file>
|
||||||
|
<file alias="22x22/edit-undo.png">themes/tango/22x22/actions/edit-undo.png</file>
|
||||||
|
<file alias="22x22/folder-new.png">themes/tango/22x22/actions/folder-new.png</file>
|
||||||
|
<file alias="22x22/format-indent-less.png">themes/tango/22x22/actions/format-indent-less.png</file>
|
||||||
|
<file alias="22x22/format-indent-more.png">themes/tango/22x22/actions/format-indent-more.png</file>
|
||||||
|
<file alias="22x22/format-justify-center.png">themes/tango/22x22/actions/format-justify-center.png</file>
|
||||||
|
<file alias="22x22/format-justify-fill.png">themes/tango/22x22/actions/format-justify-fill.png</file>
|
||||||
|
<file alias="22x22/format-justify-left.png">themes/tango/22x22/actions/format-justify-left.png</file>
|
||||||
|
<file alias="22x22/format-justify-right.png">themes/tango/22x22/actions/format-justify-right.png</file>
|
||||||
|
<file alias="22x22/format-text-bold.png">themes/tango/22x22/actions/format-text-bold.png</file>
|
||||||
|
<file alias="22x22/format-text-italic.png">themes/tango/22x22/actions/format-text-italic.png</file>
|
||||||
|
<file alias="22x22/format-text-strikethrough.png">themes/tango/22x22/actions/format-text-strikethrough.png</file>
|
||||||
|
<file alias="22x22/format-text-underline.png">themes/tango/22x22/actions/format-text-underline.png</file>
|
||||||
|
<file alias="22x22/go-bottom.png">themes/tango/22x22/actions/go-bottom.png</file>
|
||||||
|
<file alias="22x22/go-down.png">themes/tango/22x22/actions/go-down.png</file>
|
||||||
|
<file alias="22x22/go-first.png">themes/tango/22x22/actions/go-first.png</file>
|
||||||
|
<file alias="22x22/go-home.png">themes/tango/22x22/actions/go-home.png</file>
|
||||||
|
<file alias="22x22/go-jump.png">themes/tango/22x22/actions/go-jump.png</file>
|
||||||
|
<file alias="22x22/go-last.png">themes/tango/22x22/actions/go-last.png</file>
|
||||||
|
<file alias="22x22/go-next.png">themes/tango/22x22/actions/go-next.png</file>
|
||||||
|
<file alias="22x22/go-previous.png">themes/tango/22x22/actions/go-previous.png</file>
|
||||||
|
<file alias="22x22/go-top.png">themes/tango/22x22/actions/go-top.png</file>
|
||||||
|
<file alias="22x22/go-up.png">themes/tango/22x22/actions/go-up.png</file>
|
||||||
|
<file alias="22x22/list-add.png">themes/tango/22x22/actions/list-add.png</file>
|
||||||
|
<file alias="22x22/list-remove.png">themes/tango/22x22/actions/list-remove.png</file>
|
||||||
|
<file alias="22x22/mail-forward.png">themes/tango/22x22/actions/mail-forward.png</file>
|
||||||
|
<file alias="22x22/mail-mark-junk.png">themes/tango/22x22/actions/mail-mark-junk.png</file>
|
||||||
|
<file alias="22x22/mail-mark-not-junk.png">themes/tango/22x22/actions/mail-mark-not-junk.png</file>
|
||||||
|
<file alias="22x22/mail-message-new.png">themes/tango/22x22/actions/mail-message-new.png</file>
|
||||||
|
<file alias="22x22/mail-reply-all.png">themes/tango/22x22/actions/mail-reply-all.png</file>
|
||||||
|
<file alias="22x22/mail-reply-sender.png">themes/tango/22x22/actions/mail-reply-sender.png</file>
|
||||||
|
<file alias="22x22/mail-send-receive.png">themes/tango/22x22/actions/mail-send-receive.png</file>
|
||||||
|
<file alias="22x22/media-eject.png">themes/tango/22x22/actions/media-eject.png</file>
|
||||||
|
<file alias="22x22/media-playback-pause.png">themes/tango/22x22/actions/media-playback-pause.png</file>
|
||||||
|
<file alias="22x22/media-playback-start.png">themes/tango/22x22/actions/media-playback-start.png</file>
|
||||||
|
<file alias="22x22/media-playback-stop.png">themes/tango/22x22/actions/media-playback-stop.png</file>
|
||||||
|
<file alias="22x22/media-record.png">themes/tango/22x22/actions/media-record.png</file>
|
||||||
|
<file alias="22x22/media-seek-backward.png">themes/tango/22x22/actions/media-seek-backward.png</file>
|
||||||
|
<file alias="22x22/media-seek-forward.png">themes/tango/22x22/actions/media-seek-forward.png</file>
|
||||||
|
<file alias="22x22/media-skip-backward.png">themes/tango/22x22/actions/media-skip-backward.png</file>
|
||||||
|
<file alias="22x22/media-skip-forward.png">themes/tango/22x22/actions/media-skip-forward.png</file>
|
||||||
|
<file alias="22x22/process-stop.png">themes/tango/22x22/actions/process-stop.png</file>
|
||||||
|
<file alias="22x22/system-lock-screen.png">themes/tango/22x22/actions/system-lock-screen.png</file>
|
||||||
|
<file alias="22x22/system-log-out.png">themes/tango/22x22/actions/system-log-out.png</file>
|
||||||
|
<file alias="22x22/system-search.png">themes/tango/22x22/actions/system-search.png</file>
|
||||||
|
<file alias="22x22/system-shutdown.png">themes/tango/22x22/actions/system-shutdown.png</file>
|
||||||
|
<file alias="22x22/tab-new.png">themes/tango/22x22/actions/tab-new.png</file>
|
||||||
|
<file alias="22x22/view-fullscreen.png">themes/tango/22x22/actions/view-fullscreen.png</file>
|
||||||
|
<file alias="22x22/view-refresh.png">themes/tango/22x22/actions/view-refresh.png</file>
|
||||||
|
<file alias="22x22/window-new.png">themes/tango/22x22/actions/window-new.png</file>
|
||||||
|
<file alias="22x22/process-working.png">themes/tango/22x22/animations/process-working.png</file>
|
||||||
|
<file alias="22x22/accessories-calculator.png">themes/tango/22x22/apps/accessories-calculator.png</file>
|
||||||
|
<file alias="22x22/accessories-character-map.png">themes/tango/22x22/apps/accessories-character-map.png</file>
|
||||||
|
<file alias="22x22/accessories-text-editor.png">themes/tango/22x22/apps/accessories-text-editor.png</file>
|
||||||
|
<file alias="22x22/help-browser.png">themes/tango/22x22/apps/help-browser.png</file>
|
||||||
|
<file alias="22x22/internet-group-chat.png">themes/tango/22x22/apps/internet-group-chat.png</file>
|
||||||
|
<file alias="22x22/internet-mail.png">themes/tango/22x22/apps/internet-mail.png</file>
|
||||||
|
<file alias="22x22/internet-news-reader.png">themes/tango/22x22/apps/internet-news-reader.png</file>
|
||||||
|
<file alias="22x22/internet-web-browser.png">themes/tango/22x22/apps/internet-web-browser.png</file>
|
||||||
|
<file alias="22x22/office-calendar.png">themes/tango/22x22/apps/office-calendar.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop-accessibility.png">themes/tango/22x22/apps/preferences-desktop-accessibility.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop-assistive-technology.png">themes/tango/22x22/apps/preferences-desktop-assistive-technology.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop-font.png">themes/tango/22x22/apps/preferences-desktop-font.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop-keyboard-shortcuts.png">themes/tango/22x22/apps/preferences-desktop-keyboard-shortcuts.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop-locale.png">themes/tango/22x22/apps/preferences-desktop-locale.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop-multimedia.png">themes/tango/22x22/apps/preferences-desktop-multimedia.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop-remote-desktop.png">themes/tango/22x22/apps/preferences-desktop-remote-desktop.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop-screensaver.png">themes/tango/22x22/apps/preferences-desktop-screensaver.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop-theme.png">themes/tango/22x22/apps/preferences-desktop-theme.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop-wallpaper.png">themes/tango/22x22/apps/preferences-desktop-wallpaper.png</file>
|
||||||
|
<file alias="22x22/preferences-system-network-proxy.png">themes/tango/22x22/apps/preferences-system-network-proxy.png</file>
|
||||||
|
<file alias="22x22/preferences-system-session.png">themes/tango/22x22/apps/preferences-system-session.png</file>
|
||||||
|
<file alias="22x22/preferences-system-windows.png">themes/tango/22x22/apps/preferences-system-windows.png</file>
|
||||||
|
<file alias="22x22/system-file-manager.png">themes/tango/22x22/apps/system-file-manager.png</file>
|
||||||
|
<file alias="22x22/system-installer.png">themes/tango/22x22/apps/system-installer.png</file>
|
||||||
|
<file alias="22x22/system-software-update.png">themes/tango/22x22/apps/system-software-update.png</file>
|
||||||
|
<file alias="22x22/system-users.png">themes/tango/22x22/apps/system-users.png</file>
|
||||||
|
<file alias="22x22/utilities-system-monitor.png">themes/tango/22x22/apps/utilities-system-monitor.png</file>
|
||||||
|
<file alias="22x22/utilities-terminal.png">themes/tango/22x22/apps/utilities-terminal.png</file>
|
||||||
|
<file alias="22x22/applications-accessories.png">themes/tango/22x22/categories/applications-accessories.png</file>
|
||||||
|
<file alias="22x22/applications-development.png">themes/tango/22x22/categories/applications-development.png</file>
|
||||||
|
<file alias="22x22/applications-games.png">themes/tango/22x22/categories/applications-games.png</file>
|
||||||
|
<file alias="22x22/applications-graphics.png">themes/tango/22x22/categories/applications-graphics.png</file>
|
||||||
|
<file alias="22x22/applications-internet.png">themes/tango/22x22/categories/applications-internet.png</file>
|
||||||
|
<file alias="22x22/applications-multimedia.png">themes/tango/22x22/categories/applications-multimedia.png</file>
|
||||||
|
<file alias="22x22/applications-office.png">themes/tango/22x22/categories/applications-office.png</file>
|
||||||
|
<file alias="22x22/applications-other.png">themes/tango/22x22/categories/applications-other.png</file>
|
||||||
|
<file alias="22x22/applications-system.png">themes/tango/22x22/categories/applications-system.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop-peripherals.png">themes/tango/22x22/categories/preferences-desktop-peripherals.png</file>
|
||||||
|
<file alias="22x22/preferences-desktop.png">themes/tango/22x22/categories/preferences-desktop.png</file>
|
||||||
|
<file alias="22x22/preferences-system.png">themes/tango/22x22/categories/preferences-system.png</file>
|
||||||
|
<file alias="22x22/audio-card.png">themes/tango/22x22/devices/audio-card.png</file>
|
||||||
|
<file alias="22x22/audio-input-microphone.png">themes/tango/22x22/devices/audio-input-microphone.png</file>
|
||||||
|
<file alias="22x22/battery.png">themes/tango/22x22/devices/battery.png</file>
|
||||||
|
<file alias="22x22/camera-photo.png">themes/tango/22x22/devices/camera-photo.png</file>
|
||||||
|
<file alias="22x22/camera-video.png">themes/tango/22x22/devices/camera-video.png</file>
|
||||||
|
<file alias="22x22/computer.png">themes/tango/22x22/devices/computer.png</file>
|
||||||
|
<file alias="22x22/drive-harddisk.png">themes/tango/22x22/devices/drive-harddisk.png</file>
|
||||||
|
<file alias="22x22/drive-optical.png">themes/tango/22x22/devices/drive-optical.png</file>
|
||||||
|
<file alias="22x22/drive-removable-media.png">themes/tango/22x22/devices/drive-removable-media.png</file>
|
||||||
|
<file alias="22x22/input-gaming.png">themes/tango/22x22/devices/input-gaming.png</file>
|
||||||
|
<file alias="22x22/input-keyboard.png">themes/tango/22x22/devices/input-keyboard.png</file>
|
||||||
|
<file alias="22x22/input-mouse.png">themes/tango/22x22/devices/input-mouse.png</file>
|
||||||
|
<file alias="22x22/media-flash.png">themes/tango/22x22/devices/media-flash.png</file>
|
||||||
|
<file alias="22x22/media-floppy.png">themes/tango/22x22/devices/media-floppy.png</file>
|
||||||
|
<file alias="22x22/media-optical.png">themes/tango/22x22/devices/media-optical.png</file>
|
||||||
|
<file alias="22x22/multimedia-player.png">themes/tango/22x22/devices/multimedia-player.png</file>
|
||||||
|
<file alias="22x22/network-wired.png">themes/tango/22x22/devices/network-wired.png</file>
|
||||||
|
<file alias="22x22/network-wireless.png">themes/tango/22x22/devices/network-wireless.png</file>
|
||||||
|
<file alias="22x22/printer.png">themes/tango/22x22/devices/printer.png</file>
|
||||||
|
<file alias="22x22/video-display.png">themes/tango/22x22/devices/video-display.png</file>
|
||||||
|
<file alias="22x22/emblem-favorite.png">themes/tango/22x22/emblems/emblem-favorite.png</file>
|
||||||
|
<file alias="22x22/emblem-important.png">themes/tango/22x22/emblems/emblem-important.png</file>
|
||||||
|
<file alias="22x22/emblem-photos.png">themes/tango/22x22/emblems/emblem-photos.png</file>
|
||||||
|
<file alias="22x22/emblem-readonly.png">themes/tango/22x22/emblems/emblem-readonly.png</file>
|
||||||
|
<file alias="22x22/emblem-symbolic-link.png">themes/tango/22x22/emblems/emblem-symbolic-link.png</file>
|
||||||
|
<file alias="22x22/emblem-system.png">themes/tango/22x22/emblems/emblem-system.png</file>
|
||||||
|
<file alias="22x22/emblem-unreadable.png">themes/tango/22x22/emblems/emblem-unreadable.png</file>
|
||||||
|
<file alias="22x22/face-angel.png">themes/tango/22x22/emotes/face-angel.png</file>
|
||||||
|
<file alias="22x22/face-crying.png">themes/tango/22x22/emotes/face-crying.png</file>
|
||||||
|
<file alias="22x22/face-devilish.png">themes/tango/22x22/emotes/face-devilish.png</file>
|
||||||
|
<file alias="22x22/face-glasses.png">themes/tango/22x22/emotes/face-glasses.png</file>
|
||||||
|
<file alias="22x22/face-grin.png">themes/tango/22x22/emotes/face-grin.png</file>
|
||||||
|
<file alias="22x22/face-kiss.png">themes/tango/22x22/emotes/face-kiss.png</file>
|
||||||
|
<file alias="22x22/face-monkey.png">themes/tango/22x22/emotes/face-monkey.png</file>
|
||||||
|
<file alias="22x22/face-plain.png">themes/tango/22x22/emotes/face-plain.png</file>
|
||||||
|
<file alias="22x22/face-sad.png">themes/tango/22x22/emotes/face-sad.png</file>
|
||||||
|
<file alias="22x22/face-smile-big.png">themes/tango/22x22/emotes/face-smile-big.png</file>
|
||||||
|
<file alias="22x22/face-smile.png">themes/tango/22x22/emotes/face-smile.png</file>
|
||||||
|
<file alias="22x22/face-surprise.png">themes/tango/22x22/emotes/face-surprise.png</file>
|
||||||
|
<file alias="22x22/face-wink.png">themes/tango/22x22/emotes/face-wink.png</file>
|
||||||
|
<file alias="22x22/application-certificate.png">themes/tango/22x22/mimetypes/application-certificate.png</file>
|
||||||
|
<file alias="22x22/application-x-executable.png">themes/tango/22x22/mimetypes/application-x-executable.png</file>
|
||||||
|
<file alias="22x22/audio-x-generic.png">themes/tango/22x22/mimetypes/audio-x-generic.png</file>
|
||||||
|
<file alias="22x22/font-x-generic.png">themes/tango/22x22/mimetypes/font-x-generic.png</file>
|
||||||
|
<file alias="22x22/image-x-generic.png">themes/tango/22x22/mimetypes/image-x-generic.png</file>
|
||||||
|
<file alias="22x22/package-x-generic.png">themes/tango/22x22/mimetypes/package-x-generic.png</file>
|
||||||
|
<file alias="22x22/text-html.png">themes/tango/22x22/mimetypes/text-html.png</file>
|
||||||
|
<file alias="22x22/text-x-generic-template.png">themes/tango/22x22/mimetypes/text-x-generic-template.png</file>
|
||||||
|
<file alias="22x22/text-x-generic.png">themes/tango/22x22/mimetypes/text-x-generic.png</file>
|
||||||
|
<file alias="22x22/text-x-script.png">themes/tango/22x22/mimetypes/text-x-script.png</file>
|
||||||
|
<file alias="22x22/video-x-generic.png">themes/tango/22x22/mimetypes/video-x-generic.png</file>
|
||||||
|
<file alias="22x22/x-office-address-book.png">themes/tango/22x22/mimetypes/x-office-address-book.png</file>
|
||||||
|
<file alias="22x22/x-office-calendar.png">themes/tango/22x22/mimetypes/x-office-calendar.png</file>
|
||||||
|
<file alias="22x22/x-office-document-template.png">themes/tango/22x22/mimetypes/x-office-document-template.png</file>
|
||||||
|
<file alias="22x22/x-office-document.png">themes/tango/22x22/mimetypes/x-office-document.png</file>
|
||||||
|
<file alias="22x22/x-office-drawing-template.png">themes/tango/22x22/mimetypes/x-office-drawing-template.png</file>
|
||||||
|
<file alias="22x22/x-office-drawing.png">themes/tango/22x22/mimetypes/x-office-drawing.png</file>
|
||||||
|
<file alias="22x22/x-office-presentation-template.png">themes/tango/22x22/mimetypes/x-office-presentation-template.png</file>
|
||||||
|
<file alias="22x22/x-office-presentation.png">themes/tango/22x22/mimetypes/x-office-presentation.png</file>
|
||||||
|
<file alias="22x22/x-office-spreadsheet-template.png">themes/tango/22x22/mimetypes/x-office-spreadsheet-template.png</file>
|
||||||
|
<file alias="22x22/x-office-spreadsheet.png">themes/tango/22x22/mimetypes/x-office-spreadsheet.png</file>
|
||||||
|
<file alias="22x22/folder-remote.png">themes/tango/22x22/places/folder-remote.png</file>
|
||||||
|
<file alias="22x22/folder-saved-search.png">themes/tango/22x22/places/folder-saved-search.png</file>
|
||||||
|
<file alias="22x22/folder.png">themes/tango/22x22/places/folder.png</file>
|
||||||
|
<file alias="22x22/network-server.png">themes/tango/22x22/places/network-server.png</file>
|
||||||
|
<file alias="22x22/network-workgroup.png">themes/tango/22x22/places/network-workgroup.png</file>
|
||||||
|
<file alias="22x22/start-here.png">themes/tango/22x22/places/start-here.png</file>
|
||||||
|
<file alias="22x22/user-desktop.png">themes/tango/22x22/places/user-desktop.png</file>
|
||||||
|
<file alias="22x22/user-home.png">themes/tango/22x22/places/user-home.png</file>
|
||||||
|
<file alias="22x22/user-trash.png">themes/tango/22x22/places/user-trash.png</file>
|
||||||
|
<file alias="22x22/audio-volume-high.png">themes/tango/22x22/status/audio-volume-high.png</file>
|
||||||
|
<file alias="22x22/audio-volume-low.png">themes/tango/22x22/status/audio-volume-low.png</file>
|
||||||
|
<file alias="22x22/audio-volume-medium.png">themes/tango/22x22/status/audio-volume-medium.png</file>
|
||||||
|
<file alias="22x22/audio-volume-muted.png">themes/tango/22x22/status/audio-volume-muted.png</file>
|
||||||
|
<file alias="22x22/battery-caution.png">themes/tango/22x22/status/battery-caution.png</file>
|
||||||
|
<file alias="22x22/dialog-error.png">themes/tango/22x22/status/dialog-error.png</file>
|
||||||
|
<file alias="22x22/dialog-information.png">themes/tango/22x22/status/dialog-information.png</file>
|
||||||
|
<file alias="22x22/dialog-warning.png">themes/tango/22x22/status/dialog-warning.png</file>
|
||||||
|
<file alias="22x22/folder-drag-accept.png">themes/tango/22x22/status/folder-drag-accept.png</file>
|
||||||
|
<file alias="22x22/folder-open.png">themes/tango/22x22/status/folder-open.png</file>
|
||||||
|
<file alias="22x22/folder-visiting.png">themes/tango/22x22/status/folder-visiting.png</file>
|
||||||
|
<file alias="22x22/image-loading.png">themes/tango/22x22/status/image-loading.png</file>
|
||||||
|
<file alias="22x22/image-missing.png">themes/tango/22x22/status/image-missing.png</file>
|
||||||
|
<file alias="22x22/mail-attachment.png">themes/tango/22x22/status/mail-attachment.png</file>
|
||||||
|
<file alias="22x22/network-error.png">themes/tango/22x22/status/network-error.png</file>
|
||||||
|
<file alias="22x22/network-idle.png">themes/tango/22x22/status/network-idle.png</file>
|
||||||
|
<file alias="22x22/network-offline.png">themes/tango/22x22/status/network-offline.png</file>
|
||||||
|
<file alias="22x22/network-receive.png">themes/tango/22x22/status/network-receive.png</file>
|
||||||
|
<file alias="22x22/network-transmit-receive.png">themes/tango/22x22/status/network-transmit-receive.png</file>
|
||||||
|
<file alias="22x22/network-transmit.png">themes/tango/22x22/status/network-transmit.png</file>
|
||||||
|
<file alias="22x22/network-wireless-encrypted.png">themes/tango/22x22/status/network-wireless-encrypted.png</file>
|
||||||
|
<file alias="22x22/printer-error.png">themes/tango/22x22/status/printer-error.png</file>
|
||||||
|
<file alias="22x22/software-update-available.png">themes/tango/22x22/status/software-update-available.png</file>
|
||||||
|
<file alias="22x22/software-update-urgent.png">themes/tango/22x22/status/software-update-urgent.png</file>
|
||||||
|
<file alias="22x22/user-trash-full.png">themes/tango/22x22/status/user-trash-full.png</file>
|
||||||
|
<file alias="22x22/weather-clear-night.png">themes/tango/22x22/status/weather-clear-night.png</file>
|
||||||
|
<file alias="22x22/weather-clear.png">themes/tango/22x22/status/weather-clear.png</file>
|
||||||
|
<file alias="22x22/weather-few-clouds-night.png">themes/tango/22x22/status/weather-few-clouds-night.png</file>
|
||||||
|
<file alias="22x22/weather-few-clouds.png">themes/tango/22x22/status/weather-few-clouds.png</file>
|
||||||
|
<file alias="22x22/weather-overcast.png">themes/tango/22x22/status/weather-overcast.png</file>
|
||||||
|
<file alias="22x22/weather-severe-alert.png">themes/tango/22x22/status/weather-severe-alert.png</file>
|
||||||
|
<file alias="22x22/weather-showers-scattered.png">themes/tango/22x22/status/weather-showers-scattered.png</file>
|
||||||
|
<file alias="22x22/weather-showers.png">themes/tango/22x22/status/weather-showers.png</file>
|
||||||
|
<file alias="22x22/weather-snow.png">themes/tango/22x22/status/weather-snow.png</file>
|
||||||
|
<file alias="22x22/weather-storm.png">themes/tango/22x22/status/weather-storm.png</file>
|
||||||
|
<file alias="32x32/address-book-new.png">themes/tango/32x32/actions/address-book-new.png</file>
|
||||||
|
<file alias="32x32/appointment-new.png">themes/tango/32x32/actions/appointment-new.png</file>
|
||||||
|
<file alias="32x32/bookmark-new.png">themes/tango/32x32/actions/bookmark-new.png</file>
|
||||||
|
<file alias="32x32/contact-new.png">themes/tango/32x32/actions/contact-new.png</file>
|
||||||
|
<file alias="32x32/document-new.png">themes/tango/32x32/actions/document-new.png</file>
|
||||||
|
<file alias="32x32/document-open.png">themes/tango/32x32/actions/document-open.png</file>
|
||||||
|
<file alias="32x32/document-print-preview.png">themes/tango/32x32/actions/document-print-preview.png</file>
|
||||||
|
<file alias="32x32/document-print.png">themes/tango/32x32/actions/document-print.png</file>
|
||||||
|
<file alias="32x32/document-pdf.png">themes/tango/32x32/actions/document-pdf.png</file>
|
||||||
|
<file alias="32x32/document-properties.png">themes/tango/32x32/actions/document-properties.png</file>
|
||||||
|
<file alias="32x32/document-revert.png">themes/tango/32x32/actions/document-revert.png</file>
|
||||||
|
<file alias="32x32/document-save-as.png">themes/tango/32x32/actions/document-save-as.png</file>
|
||||||
|
<file alias="32x32/document-save.png">themes/tango/32x32/actions/document-save.png</file>
|
||||||
|
<file alias="32x32/edit-clear.png">themes/tango/32x32/actions/edit-clear.png</file>
|
||||||
|
<file alias="32x32/edit-copy.png">themes/tango/32x32/actions/edit-copy.png</file>
|
||||||
|
<file alias="32x32/edit-cut.png">themes/tango/32x32/actions/edit-cut.png</file>
|
||||||
|
<file alias="32x32/edit-delete.png">themes/tango/32x32/actions/edit-delete.png</file>
|
||||||
|
<file alias="32x32/edit-find-replace.png">themes/tango/32x32/actions/edit-find-replace.png</file>
|
||||||
|
<file alias="32x32/edit-find.png">themes/tango/32x32/actions/edit-find.png</file>
|
||||||
|
<file alias="32x32/edit-paste.png">themes/tango/32x32/actions/edit-paste.png</file>
|
||||||
|
<file alias="32x32/edit-redo.png">themes/tango/32x32/actions/edit-redo.png</file>
|
||||||
|
<file alias="32x32/edit-select-all.png">themes/tango/32x32/actions/edit-select-all.png</file>
|
||||||
|
<file alias="32x32/edit-undo.png">themes/tango/32x32/actions/edit-undo.png</file>
|
||||||
|
<file alias="32x32/folder-new.png">themes/tango/32x32/actions/folder-new.png</file>
|
||||||
|
<file alias="32x32/format-indent-less.png">themes/tango/32x32/actions/format-indent-less.png</file>
|
||||||
|
<file alias="32x32/format-indent-more.png">themes/tango/32x32/actions/format-indent-more.png</file>
|
||||||
|
<file alias="32x32/format-justify-center.png">themes/tango/32x32/actions/format-justify-center.png</file>
|
||||||
|
<file alias="32x32/format-justify-fill.png">themes/tango/32x32/actions/format-justify-fill.png</file>
|
||||||
|
<file alias="32x32/format-justify-left.png">themes/tango/32x32/actions/format-justify-left.png</file>
|
||||||
|
<file alias="32x32/format-justify-right.png">themes/tango/32x32/actions/format-justify-right.png</file>
|
||||||
|
<file alias="32x32/format-text-bold.png">themes/tango/32x32/actions/format-text-bold.png</file>
|
||||||
|
<file alias="32x32/format-text-italic.png">themes/tango/32x32/actions/format-text-italic.png</file>
|
||||||
|
<file alias="32x32/format-text-strikethrough.png">themes/tango/32x32/actions/format-text-strikethrough.png</file>
|
||||||
|
<file alias="32x32/format-text-underline.png">themes/tango/32x32/actions/format-text-underline.png</file>
|
||||||
|
<file alias="32x32/go-bottom.png">themes/tango/32x32/actions/go-bottom.png</file>
|
||||||
|
<file alias="32x32/go-down.png">themes/tango/32x32/actions/go-down.png</file>
|
||||||
|
<file alias="32x32/go-first.png">themes/tango/32x32/actions/go-first.png</file>
|
||||||
|
<file alias="32x32/go-home.png">themes/tango/32x32/actions/go-home.png</file>
|
||||||
|
<file alias="32x32/go-jump.png">themes/tango/32x32/actions/go-jump.png</file>
|
||||||
|
<file alias="32x32/go-last.png">themes/tango/32x32/actions/go-last.png</file>
|
||||||
|
<file alias="32x32/go-next.png">themes/tango/32x32/actions/go-next.png</file>
|
||||||
|
<file alias="32x32/go-previous.png">themes/tango/32x32/actions/go-previous.png</file>
|
||||||
|
<file alias="32x32/go-top.png">themes/tango/32x32/actions/go-top.png</file>
|
||||||
|
<file alias="32x32/go-up.png">themes/tango/32x32/actions/go-up.png</file>
|
||||||
|
<file alias="32x32/list-add.png">themes/tango/32x32/actions/list-add.png</file>
|
||||||
|
<file alias="32x32/list-remove.png">themes/tango/32x32/actions/list-remove.png</file>
|
||||||
|
<file alias="32x32/mail-forward.png">themes/tango/32x32/actions/mail-forward.png</file>
|
||||||
|
<file alias="32x32/mail-mark-junk.png">themes/tango/32x32/actions/mail-mark-junk.png</file>
|
||||||
|
<file alias="32x32/mail-mark-not-junk.png">themes/tango/32x32/actions/mail-mark-not-junk.png</file>
|
||||||
|
<file alias="32x32/mail-message-new.png">themes/tango/32x32/actions/mail-message-new.png</file>
|
||||||
|
<file alias="32x32/mail-reply-all.png">themes/tango/32x32/actions/mail-reply-all.png</file>
|
||||||
|
<file alias="32x32/mail-reply-sender.png">themes/tango/32x32/actions/mail-reply-sender.png</file>
|
||||||
|
<file alias="32x32/mail-send-receive.png">themes/tango/32x32/actions/mail-send-receive.png</file>
|
||||||
|
<file alias="32x32/media-eject.png">themes/tango/32x32/actions/media-eject.png</file>
|
||||||
|
<file alias="32x32/media-playback-pause.png">themes/tango/32x32/actions/media-playback-pause.png</file>
|
||||||
|
<file alias="32x32/media-playback-start.png">themes/tango/32x32/actions/media-playback-start.png</file>
|
||||||
|
<file alias="32x32/media-playback-stop.png">themes/tango/32x32/actions/media-playback-stop.png</file>
|
||||||
|
<file alias="32x32/media-record.png">themes/tango/32x32/actions/media-record.png</file>
|
||||||
|
<file alias="32x32/media-seek-backward.png">themes/tango/32x32/actions/media-seek-backward.png</file>
|
||||||
|
<file alias="32x32/media-seek-forward.png">themes/tango/32x32/actions/media-seek-forward.png</file>
|
||||||
|
<file alias="32x32/media-skip-backward.png">themes/tango/32x32/actions/media-skip-backward.png</file>
|
||||||
|
<file alias="32x32/media-skip-forward.png">themes/tango/32x32/actions/media-skip-forward.png</file>
|
||||||
|
<file alias="32x32/process-stop.png">themes/tango/32x32/actions/process-stop.png</file>
|
||||||
|
<file alias="32x32/system-lock-screen.png">themes/tango/32x32/actions/system-lock-screen.png</file>
|
||||||
|
<file alias="32x32/system-log-out.png">themes/tango/32x32/actions/system-log-out.png</file>
|
||||||
|
<file alias="32x32/system-search.png">themes/tango/32x32/actions/system-search.png</file>
|
||||||
|
<file alias="32x32/system-shutdown.png">themes/tango/32x32/actions/system-shutdown.png</file>
|
||||||
|
<file alias="32x32/tab-new.png">themes/tango/32x32/actions/tab-new.png</file>
|
||||||
|
<file alias="32x32/view-fullscreen.png">themes/tango/32x32/actions/view-fullscreen.png</file>
|
||||||
|
<file alias="32x32/view-refresh.png">themes/tango/32x32/actions/view-refresh.png</file>
|
||||||
|
<file alias="32x32/window-new.png">themes/tango/32x32/actions/window-new.png</file>
|
||||||
|
<file alias="32x32/process-working.png">themes/tango/32x32/animations/process-working.png</file>
|
||||||
|
<file alias="32x32/accessories-calculator.png">themes/tango/32x32/apps/accessories-calculator.png</file>
|
||||||
|
<file alias="32x32/accessories-character-map.png">themes/tango/32x32/apps/accessories-character-map.png</file>
|
||||||
|
<file alias="32x32/accessories-text-editor.png">themes/tango/32x32/apps/accessories-text-editor.png</file>
|
||||||
|
<file alias="32x32/help-browser.png">themes/tango/32x32/apps/help-browser.png</file>
|
||||||
|
<file alias="32x32/internet-group-chat.png">themes/tango/32x32/apps/internet-group-chat.png</file>
|
||||||
|
<file alias="32x32/internet-mail.png">themes/tango/32x32/apps/internet-mail.png</file>
|
||||||
|
<file alias="32x32/internet-news-reader.png">themes/tango/32x32/apps/internet-news-reader.png</file>
|
||||||
|
<file alias="32x32/internet-web-browser.png">themes/tango/32x32/apps/internet-web-browser.png</file>
|
||||||
|
<file alias="32x32/office-calendar.png">themes/tango/32x32/apps/office-calendar.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop-accessibility.png">themes/tango/32x32/apps/preferences-desktop-accessibility.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop-assistive-technology.png">themes/tango/32x32/apps/preferences-desktop-assistive-technology.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop-font.png">themes/tango/32x32/apps/preferences-desktop-font.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop-keyboard-shortcuts.png">themes/tango/32x32/apps/preferences-desktop-keyboard-shortcuts.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop-locale.png">themes/tango/32x32/apps/preferences-desktop-locale.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop-multimedia.png">themes/tango/32x32/apps/preferences-desktop-multimedia.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop-remote-desktop.png">themes/tango/32x32/apps/preferences-desktop-remote-desktop.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop-screensaver.png">themes/tango/32x32/apps/preferences-desktop-screensaver.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop-theme.png">themes/tango/32x32/apps/preferences-desktop-theme.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop-wallpaper.png">themes/tango/32x32/apps/preferences-desktop-wallpaper.png</file>
|
||||||
|
<file alias="32x32/preferences-system-network-proxy.png">themes/tango/32x32/apps/preferences-system-network-proxy.png</file>
|
||||||
|
<file alias="32x32/preferences-system-session.png">themes/tango/32x32/apps/preferences-system-session.png</file>
|
||||||
|
<file alias="32x32/preferences-system-windows.png">themes/tango/32x32/apps/preferences-system-windows.png</file>
|
||||||
|
<file alias="32x32/system-file-manager.png">themes/tango/32x32/apps/system-file-manager.png</file>
|
||||||
|
<file alias="32x32/system-installer.png">themes/tango/32x32/apps/system-installer.png</file>
|
||||||
|
<file alias="32x32/system-software-update.png">themes/tango/32x32/apps/system-software-update.png</file>
|
||||||
|
<file alias="32x32/system-users.png">themes/tango/32x32/apps/system-users.png</file>
|
||||||
|
<file alias="32x32/utilities-system-monitor.png">themes/tango/32x32/apps/utilities-system-monitor.png</file>
|
||||||
|
<file alias="32x32/utilities-terminal.png">themes/tango/32x32/apps/utilities-terminal.png</file>
|
||||||
|
<file alias="32x32/applications-accessories.png">themes/tango/32x32/categories/applications-accessories.png</file>
|
||||||
|
<file alias="32x32/applications-development.png">themes/tango/32x32/categories/applications-development.png</file>
|
||||||
|
<file alias="32x32/applications-games.png">themes/tango/32x32/categories/applications-games.png</file>
|
||||||
|
<file alias="32x32/applications-graphics.png">themes/tango/32x32/categories/applications-graphics.png</file>
|
||||||
|
<file alias="32x32/applications-internet.png">themes/tango/32x32/categories/applications-internet.png</file>
|
||||||
|
<file alias="32x32/applications-multimedia.png">themes/tango/32x32/categories/applications-multimedia.png</file>
|
||||||
|
<file alias="32x32/applications-office.png">themes/tango/32x32/categories/applications-office.png</file>
|
||||||
|
<file alias="32x32/applications-other.png">themes/tango/32x32/categories/applications-other.png</file>
|
||||||
|
<file alias="32x32/applications-system.png">themes/tango/32x32/categories/applications-system.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop-peripherals.png">themes/tango/32x32/categories/preferences-desktop-peripherals.png</file>
|
||||||
|
<file alias="32x32/preferences-desktop.png">themes/tango/32x32/categories/preferences-desktop.png</file>
|
||||||
|
<file alias="32x32/preferences-system.png">themes/tango/32x32/categories/preferences-system.png</file>
|
||||||
|
<file alias="32x32/audio-card.png">themes/tango/32x32/devices/audio-card.png</file>
|
||||||
|
<file alias="32x32/audio-input-microphone.png">themes/tango/32x32/devices/audio-input-microphone.png</file>
|
||||||
|
<file alias="32x32/battery.png">themes/tango/32x32/devices/battery.png</file>
|
||||||
|
<file alias="32x32/camera-photo.png">themes/tango/32x32/devices/camera-photo.png</file>
|
||||||
|
<file alias="32x32/camera-video.png">themes/tango/32x32/devices/camera-video.png</file>
|
||||||
|
<file alias="32x32/computer.png">themes/tango/32x32/devices/computer.png</file>
|
||||||
|
<file alias="32x32/drive-harddisk.png">themes/tango/32x32/devices/drive-harddisk.png</file>
|
||||||
|
<file alias="32x32/drive-optical.png">themes/tango/32x32/devices/drive-optical.png</file>
|
||||||
|
<file alias="32x32/drive-removable-media.png">themes/tango/32x32/devices/drive-removable-media.png</file>
|
||||||
|
<file alias="32x32/input-gaming.png">themes/tango/32x32/devices/input-gaming.png</file>
|
||||||
|
<file alias="32x32/input-keyboard.png">themes/tango/32x32/devices/input-keyboard.png</file>
|
||||||
|
<file alias="32x32/input-mouse.png">themes/tango/32x32/devices/input-mouse.png</file>
|
||||||
|
<file alias="32x32/media-flash.png">themes/tango/32x32/devices/media-flash.png</file>
|
||||||
|
<file alias="32x32/media-floppy.png">themes/tango/32x32/devices/media-floppy.png</file>
|
||||||
|
<file alias="32x32/media-optical.png">themes/tango/32x32/devices/media-optical.png</file>
|
||||||
|
<file alias="32x32/multimedia-player.png">themes/tango/32x32/devices/multimedia-player.png</file>
|
||||||
|
<file alias="32x32/network-wired.png">themes/tango/32x32/devices/network-wired.png</file>
|
||||||
|
<file alias="32x32/network-wireless.png">themes/tango/32x32/devices/network-wireless.png</file>
|
||||||
|
<file alias="32x32/printer.png">themes/tango/32x32/devices/printer.png</file>
|
||||||
|
<file alias="32x32/video-display.png">themes/tango/32x32/devices/video-display.png</file>
|
||||||
|
<file alias="32x32/emblem-favorite.png">themes/tango/32x32/emblems/emblem-favorite.png</file>
|
||||||
|
<file alias="32x32/emblem-important.png">themes/tango/32x32/emblems/emblem-important.png</file>
|
||||||
|
<file alias="32x32/emblem-photos.png">themes/tango/32x32/emblems/emblem-photos.png</file>
|
||||||
|
<file alias="32x32/emblem-readonly.png">themes/tango/32x32/emblems/emblem-readonly.png</file>
|
||||||
|
<file alias="32x32/emblem-symbolic-link.png">themes/tango/32x32/emblems/emblem-symbolic-link.png</file>
|
||||||
|
<file alias="32x32/emblem-system.png">themes/tango/32x32/emblems/emblem-system.png</file>
|
||||||
|
<file alias="32x32/emblem-unreadable.png">themes/tango/32x32/emblems/emblem-unreadable.png</file>
|
||||||
|
<file alias="32x32/face-angel.png">themes/tango/32x32/emotes/face-angel.png</file>
|
||||||
|
<file alias="32x32/face-crying.png">themes/tango/32x32/emotes/face-crying.png</file>
|
||||||
|
<file alias="32x32/face-devilish.png">themes/tango/32x32/emotes/face-devilish.png</file>
|
||||||
|
<file alias="32x32/face-glasses.png">themes/tango/32x32/emotes/face-glasses.png</file>
|
||||||
|
<file alias="32x32/face-grin.png">themes/tango/32x32/emotes/face-grin.png</file>
|
||||||
|
<file alias="32x32/face-kiss.png">themes/tango/32x32/emotes/face-kiss.png</file>
|
||||||
|
<file alias="32x32/face-monkey.png">themes/tango/32x32/emotes/face-monkey.png</file>
|
||||||
|
<file alias="32x32/face-plain.png">themes/tango/32x32/emotes/face-plain.png</file>
|
||||||
|
<file alias="32x32/face-sad.png">themes/tango/32x32/emotes/face-sad.png</file>
|
||||||
|
<file alias="32x32/face-smile-big.png">themes/tango/32x32/emotes/face-smile-big.png</file>
|
||||||
|
<file alias="32x32/face-smile.png">themes/tango/32x32/emotes/face-smile.png</file>
|
||||||
|
<file alias="32x32/face-surprise.png">themes/tango/32x32/emotes/face-surprise.png</file>
|
||||||
|
<file alias="32x32/face-wink.png">themes/tango/32x32/emotes/face-wink.png</file>
|
||||||
|
<file alias="32x32/application-certificate.png">themes/tango/32x32/mimetypes/application-certificate.png</file>
|
||||||
|
<file alias="32x32/application-x-executable.png">themes/tango/32x32/mimetypes/application-x-executable.png</file>
|
||||||
|
<file alias="32x32/audio-x-generic.png">themes/tango/32x32/mimetypes/audio-x-generic.png</file>
|
||||||
|
<file alias="32x32/font-x-generic.png">themes/tango/32x32/mimetypes/font-x-generic.png</file>
|
||||||
|
<file alias="32x32/image-x-generic.png">themes/tango/32x32/mimetypes/image-x-generic.png</file>
|
||||||
|
<file alias="32x32/package-x-generic.png">themes/tango/32x32/mimetypes/package-x-generic.png</file>
|
||||||
|
<file alias="32x32/text-html.png">themes/tango/32x32/mimetypes/text-html.png</file>
|
||||||
|
<file alias="32x32/text-x-generic-template.png">themes/tango/32x32/mimetypes/text-x-generic-template.png</file>
|
||||||
|
<file alias="32x32/text-x-generic.png">themes/tango/32x32/mimetypes/text-x-generic.png</file>
|
||||||
|
<file alias="32x32/text-x-script.png">themes/tango/32x32/mimetypes/text-x-script.png</file>
|
||||||
|
<file alias="32x32/video-x-generic.png">themes/tango/32x32/mimetypes/video-x-generic.png</file>
|
||||||
|
<file alias="32x32/x-office-address-book.png">themes/tango/32x32/mimetypes/x-office-address-book.png</file>
|
||||||
|
<file alias="32x32/x-office-calendar.png">themes/tango/32x32/mimetypes/x-office-calendar.png</file>
|
||||||
|
<file alias="32x32/x-office-document-template.png">themes/tango/32x32/mimetypes/x-office-document-template.png</file>
|
||||||
|
<file alias="32x32/x-office-document.png">themes/tango/32x32/mimetypes/x-office-document.png</file>
|
||||||
|
<file alias="32x32/x-office-drawing-template.png">themes/tango/32x32/mimetypes/x-office-drawing-template.png</file>
|
||||||
|
<file alias="32x32/x-office-drawing.png">themes/tango/32x32/mimetypes/x-office-drawing.png</file>
|
||||||
|
<file alias="32x32/x-office-presentation-template.png">themes/tango/32x32/mimetypes/x-office-presentation-template.png</file>
|
||||||
|
<file alias="32x32/x-office-presentation.png">themes/tango/32x32/mimetypes/x-office-presentation.png</file>
|
||||||
|
<file alias="32x32/x-office-spreadsheet-template.png">themes/tango/32x32/mimetypes/x-office-spreadsheet-template.png</file>
|
||||||
|
<file alias="32x32/x-office-spreadsheet.png">themes/tango/32x32/mimetypes/x-office-spreadsheet.png</file>
|
||||||
|
<file alias="32x32/folder-remote.png">themes/tango/32x32/places/folder-remote.png</file>
|
||||||
|
<file alias="32x32/folder-saved-search.png">themes/tango/32x32/places/folder-saved-search.png</file>
|
||||||
|
<file alias="32x32/folder.png">themes/tango/32x32/places/folder.png</file>
|
||||||
|
<file alias="32x32/network-server.png">themes/tango/32x32/places/network-server.png</file>
|
||||||
|
<file alias="32x32/network-workgroup.png">themes/tango/32x32/places/network-workgroup.png</file>
|
||||||
|
<file alias="32x32/start-here.png">themes/tango/32x32/places/start-here.png</file>
|
||||||
|
<file alias="32x32/user-desktop.png">themes/tango/32x32/places/user-desktop.png</file>
|
||||||
|
<file alias="32x32/user-home.png">themes/tango/32x32/places/user-home.png</file>
|
||||||
|
<file alias="32x32/user-trash.png">themes/tango/32x32/places/user-trash.png</file>
|
||||||
|
<file alias="32x32/audio-volume-high.png">themes/tango/32x32/status/audio-volume-high.png</file>
|
||||||
|
<file alias="32x32/audio-volume-low.png">themes/tango/32x32/status/audio-volume-low.png</file>
|
||||||
|
<file alias="32x32/audio-volume-medium.png">themes/tango/32x32/status/audio-volume-medium.png</file>
|
||||||
|
<file alias="32x32/audio-volume-muted.png">themes/tango/32x32/status/audio-volume-muted.png</file>
|
||||||
|
<file alias="32x32/battery-caution.png">themes/tango/32x32/status/battery-caution.png</file>
|
||||||
|
<file alias="32x32/dialog-error.png">themes/tango/32x32/status/dialog-error.png</file>
|
||||||
|
<file alias="32x32/dialog-information.png">themes/tango/32x32/status/dialog-information.png</file>
|
||||||
|
<file alias="32x32/dialog-warning.png">themes/tango/32x32/status/dialog-warning.png</file>
|
||||||
|
<file alias="32x32/folder-drag-accept.png">themes/tango/32x32/status/folder-drag-accept.png</file>
|
||||||
|
<file alias="32x32/folder-open.png">themes/tango/32x32/status/folder-open.png</file>
|
||||||
|
<file alias="32x32/folder-visiting.png">themes/tango/32x32/status/folder-visiting.png</file>
|
||||||
|
<file alias="32x32/image-loading.png">themes/tango/32x32/status/image-loading.png</file>
|
||||||
|
<file alias="32x32/image-missing.png">themes/tango/32x32/status/image-missing.png</file>
|
||||||
|
<file alias="32x32/mail-attachment.png">themes/tango/32x32/status/mail-attachment.png</file>
|
||||||
|
<file alias="32x32/network-error.png">themes/tango/32x32/status/network-error.png</file>
|
||||||
|
<file alias="32x32/network-idle.png">themes/tango/32x32/status/network-idle.png</file>
|
||||||
|
<file alias="32x32/network-offline.png">themes/tango/32x32/status/network-offline.png</file>
|
||||||
|
<file alias="32x32/network-receive.png">themes/tango/32x32/status/network-receive.png</file>
|
||||||
|
<file alias="32x32/network-transmit-receive.png">themes/tango/32x32/status/network-transmit-receive.png</file>
|
||||||
|
<file alias="32x32/network-transmit.png">themes/tango/32x32/status/network-transmit.png</file>
|
||||||
|
<file alias="32x32/network-wireless-encrypted.png">themes/tango/32x32/status/network-wireless-encrypted.png</file>
|
||||||
|
<file alias="32x32/printer-error.png">themes/tango/32x32/status/printer-error.png</file>
|
||||||
|
<file alias="32x32/software-update-available.png">themes/tango/32x32/status/software-update-available.png</file>
|
||||||
|
<file alias="32x32/software-update-urgent.png">themes/tango/32x32/status/software-update-urgent.png</file>
|
||||||
|
<file alias="32x32/user-trash-full.png">themes/tango/32x32/status/user-trash-full.png</file>
|
||||||
|
<file alias="32x32/weather-clear-night.png">themes/tango/32x32/status/weather-clear-night.png</file>
|
||||||
|
<file alias="32x32/weather-clear.png">themes/tango/32x32/status/weather-clear.png</file>
|
||||||
|
<file alias="32x32/weather-few-clouds-night.png">themes/tango/32x32/status/weather-few-clouds-night.png</file>
|
||||||
|
<file alias="32x32/weather-few-clouds.png">themes/tango/32x32/status/weather-few-clouds.png</file>
|
||||||
|
<file alias="32x32/weather-overcast.png">themes/tango/32x32/status/weather-overcast.png</file>
|
||||||
|
<file alias="32x32/weather-severe-alert.png">themes/tango/32x32/status/weather-severe-alert.png</file>
|
||||||
|
<file alias="32x32/weather-showers-scattered.png">themes/tango/32x32/status/weather-showers-scattered.png</file>
|
||||||
|
<file alias="32x32/weather-showers.png">themes/tango/32x32/status/weather-showers.png</file>
|
||||||
|
<file alias="32x32/weather-snow.png">themes/tango/32x32/status/weather-snow.png</file>
|
||||||
|
<file alias="32x32/weather-storm.png">themes/tango/32x32/status/weather-storm.png</file>
|
||||||
|
<file alias="index.theme">themes/tango/index.theme</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/icons">
|
||||||
|
<file>images/splashEmpty.png</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="/">
|
||||||
|
<file>themes/tango/index.theme</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
||||||
Reference in New Issue
Block a user