/****************************************************************************
**
** Copyright (C) 2013 Valentina project All Rights Reserved.
**
** This file is part of Valentina.
**
** Tox is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Tox is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see .
**
****************************************************************************/
#ifndef TABLEWINDOW_H
#define TABLEWINDOW_H
#include
#include
#include "widgets/vitem.h"
namespace Ui {
class TableWindow;
}
/**
* @brief TableWindow клас вікна створення розкладки.
*/
class TableWindow : public QMainWindow{
Q_OBJECT
public:
/**
* @brief numberDetal Виводиться кількість деталей що ще залишилися.
*/
QLabel* numberDetal;
/**
* @brief colission Виводиться чи є колізії.
*/
QLabel* colission;
/**
* @brief TableWindow Конструктор класу вікна створення розкладки.
* @param parent Батько об'єкту. За замовчуванням = 0.
*/
explicit TableWindow(QWidget *parent = 0);
/**
* @brief ~TableWindow Деструктор класу вікна.
*/
~TableWindow();
public slots:
/**
* @brief ModelChosen Слот, що виконується при отриманні сигналу про розрахунок всіх деталей
*моделі.
* @param listDetails Список моделей деталі.
*/
void ModelChosen(QVector listDetails);
/**
* @brief StopTable Слот, що виконується при хованні вікна. Виконує неохідні очищення і ховає
*вікно.
*/
void StopTable();
/**
* @brief saveScene Слот виконується при натисненні кнопки зберегти.
*/
void saveScene();
/**
* @brief GetNextDetail Слот виконується при натисненні кнопки наступна деталь.
*/
void GetNextDetail();
/**
* @brief itemChect Відключає можливість виклику перевороту, якщо не вибрано жодної деталі.
* @param flag Булеве значення що регулює стан кнопки.
*/
void itemChect(bool flag);
/**
* @brief itemOut Слот, що виконується при отриманні сигналу виходу за межі листа.
* @param number Номер деталі в списку що вийшла за межі.
* @param flag Зберігає стан деталі.
*/
void itemOut(int number, bool flag);
/**
* @brief itemColliding Сигнал, що виконується при отриманні сигналу колізії об'єктів.
* @param list Список об'єктів що перетинаються.
* @param number 0 - включити до списку деталей що перетинаються, 1 - виключити зі списку.
*/
void itemColliding(QList list, int number);
/**
* @brief AddLength Збільшує довжину листа на певне значення за один раз.
*/
void AddLength();
/**
* @brief RemoveLength Зменшує довжину листа на певне знечення за один раз.
*Зменшення відбувається до мінімально заданого значення.
*/
void RemoveLength();
signals:
/**
* @brief closed Сигнал посилається при хованні вікна.
*/
void closed();
/**
* @brief LengthChanged Сигнал посилається при зміні розміру листа.
*/
void LengthChanged();
protected:
/**
* @brief closeEvent Перехоплення події закриття.
* @param event Подія що отримується.
*/
void closeEvent(QCloseEvent *event);
/**
* @brief moveToCenter Переміщує вікно у центер екрану.
*/
void moveToCenter();
/**
* @brief showEvent Перехоплення події показу вікна для розміщення його поцентру.
* @param event Подія що отримується.
*/
void showEvent ( QShowEvent * event );
void keyPressEvent ( QKeyEvent * event );
private:
/**
* @brief ui Змінна для доступу до об'єктів вікна.
*/
Ui::TableWindow* ui;
/**
* @brief listDetails Список деталей на укладання.
*/
QVector listDetails;
/**
* @brief outItems Змінна зберігає показує чи маємо деталі що виходять за межі листа.
*/
bool outItems;
/**
* @brief collidingItems Змінна показує чи маємо деталі що перетинаються.
*/
bool collidingItems;
/**
* @brief currentScene Зберігається покажчик на сцену.
*/
QGraphicsScene* currentScene;
/**
* @brief paper Зберігається покажчик на прямокутник що імітує листа паперу.
*/
QGraphicsRectItem* paper;
/**
* @brief shadowPaper Зберігається покажчик на прямокутник що імітує тінь листа паперу.
*/
QGraphicsRectItem* shadowPaper;
/**
* @brief checkNext Метод регулює стан кнопки Next.
*/
void checkNext();
/**
* @brief listOutItems Список стану виходу за лист кожної деталі.
*/
QBitArray* listOutItems;
/**
* @brief listCollidingItems Список що зберігає деталі що перетинаються між собою.
*/
QList listCollidingItems;
/**
* @brief AddPaper Додає на сцену лист паперу з тінню.
*/
void AddPaper();
/**
* @brief AddDetail Додає наступну деталь.
*/
void AddDetail();
/**
* @brief indexDetail Індекс деталі в списку, що буде викладатися наступного разу.
*/
qint32 indexDetail;
/**
* @brief sceneRect Мінімальний розмір листа паперу що буде показуватися на сцені.
*/
QRectF sceneRect;
TableWindow(const TableWindow &window);
const TableWindow &operator=(const TableWindow& window);
void SvgFile(const QString &name)const;
void PngFile(const QString &name)const;
void PsFile(const QString &name)const;
};
#endif // TABLEWINDOW_H