Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "coinsdatabase.h"
- CoinsDatabase::CoinsDatabase()
- {
- }
- int CoinsDatabase::count() const
- {
- return db.count();
- }
- int CoinsDatabase::append(CoinItem &record)
- {
- modified = true;
- record.id = ++maxId; //присваиваем записи незанятый айди и увеличиваем число айди
- db[record.id] = record;
- QMutableVectorIterator<uint32_t> i(ids);
- int index = 0; //Индекс вставки записи в браузер с учётом сортировки
- while (i.hasNext() && db[i.next()] < record)
- index++;
- if (db[i.value()]< record)
- {
- i.insert(record.id);
- }
- else
- {
- i.previous();
- i.insert(record.id);
- }
- return index;
- }
- void CoinsDatabase::remove(uint32_t id)
- {
- modified = true;
- db.remove(id); //удалить из БД
- ids.removeOne(id); //удалить из списка айдишников
- }
- int CoinsDatabase::update(const CoinItem &record)
- {
- modified = true;
- CoinItem tmp = record; //временная запись для хранения данных
- uint32_t oldId = tmp.id; //сохраняем id, чтобы оставить его прежним у новой записи
- remove(oldId); //удаляем запись по id
- int updateRec = append(tmp); //вставляем обновлённую запись в оба контейнера
- maxId--; //исправляем последствия append'а
- tmp.id = oldId; //меняем id записи на старый
- ids[updateRec] = oldId;
- db.remove(maxId); //удалить из db
- db.insert(oldId, tmp); //чтобы заново вставить с новым ключом
- return updateRec;
- }
- CoinItem CoinsDatabase::record(uint32_t id) const
- {
- return db[id];
- }
- const QVector<QListWidgetItem *> CoinsDatabase::records() const
- {
- QVector<QListWidgetItem *> vector;
- QVectorIterator<uint32_t> i(ids);
- while (i.hasNext())
- {
- CoinItem currentItem = db[i.next()];
- vector.append(itemToWidget(currentItem));
- }
- return vector;
- }
- bool CoinsDatabase::save(const QString &filename)
- {
- bool opened = false;
- if (!filename.isEmpty())
- {
- QFile file(filename);
- opened = file.open(QIODevice::WriteOnly);
- modified = false;
- QDataStream output(&file);
- output >> db >> ids >> maxId;
- file.close();
- }
- return opened;
- }
- bool CoinsDatabase::load(const QString &filename)
- {
- bool opened = false;
- if (!filename.isEmpty()) //если имя файла не пустое
- {
- // Создаем файл
- QFile file(filename);
- opened = file.open(QIODevice::ReadOnly);
- //Открываем файл только для чтения
- if (opened)
- {
- modified = false;
- QDataStream output(&file);
- output >> db >> ids >> maxId;
- file.close();
- }
- }
- return opened;
- }
- void CoinsDatabase::clear()
- {
- modified = true;
- maxId = 0;
- db.clear();
- ids.clear();
- }
- bool CoinsDatabase::isModified() const
- {
- return modified;
- }
- QListWidgetItem *CoinsDatabase::itemToWidget(const CoinItem &item) const
- {
- QString label;
- (label += item.name) += "\t";
- if (item.era == Era::AfterChrist)
- {
- label += QString::number(item.year);
- }
- else
- {
- label += QString::number(item.century) += " в. до н. э.";
- }
- if (item.isRare)
- {
- (label += "\t") += QString::number(item.number) += " шт.";
- }
- return new QListWidgetItem(label);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement