#ifndef OKNO_H #define OKNO_H #include #include #include namespace Ui { class Okno; } class Info { public: int len; int from_line; int from_col; Info () : len (-1), from_line (-1), from_col (-1) { } }; const int n = 8; class MyItem : public QTreeWidgetItem { public: Info pole [n][n]; int xx, yy; }; class Okno : public QMainWindow { Q_OBJECT public: explicit Okno(QWidget *parent = 0); ~Okno(); private slots: void on_treeWidget_itemClicked(QTreeWidgetItem *item, int column); void on_tableWidget_cellDoubleClicked(int row, int column); private: Info pole [n][n]; void setupTable (QTableWidget *t); void jump (int i, int j, int level, MyItem * node); void search (QTreeWidgetItem * item, int i, int j, int level); private: Ui::Okno *ui; }; #endif // OKNO_H #include "okno.h" #include "ui_okno.h" Okno::Okno(QWidget *parent) : QMainWindow(parent), ui(new Ui::Okno) { ui->setupUi(this); setupTable (ui->tableWidget); setupTable (ui->stateTable); jump (0, 0, 1, NULL); } Okno::~Okno() { delete ui; } void Okno::setupTable (QTableWidget * t) { t->setColumnCount (n); t->setRowCount (n); int h = t->rowHeight(0); for (int i = 0; i < n ; i++) t->setColumnWidth (i, h); } QColor color (int level) { return QColor::fromHsv ((10*level)%360, 250, 250); } void Okno::jump (int i, int j, int level, MyItem *node) { if (i>=0 && i=0 && j level) { pole[i][j].len = level; QTableWidgetItem * item = new QTableWidgetItem; item->setText (QString::number (level)); item->setBackgroundColor (color (level)); ui->tableWidget->setItem (i, j, item); MyItem * above = node; node = new MyItem; node->setText (0, QString::number (level) + " : " + QString::number (i) + " , " + QString::number (j) ); node->setBackgroundColor (0, color (level)); if (above != NULL) above->addChild (node); else ui->treeWidget->addTopLevelItem (node); if (above) { pole[i][j].from_line = above->xx; pole[i][j].from_col = above->yy; item->setToolTip(QString::number (above->xx) + "," + QString::number (above->yy) ); } for (int x = 0; x < n; x++) for (int y = 0; y < n; y++) node->pole[x][y] = pole[x][y]; node->xx = i; node->yy = j; jump (i+2, j+1, level+1, node); jump (i+2, j-1, level+1, node); jump (i-2, j+1, level+1, node); jump (i-2, j-1, level+1, node); jump (i+1, j+2, level+1, node); jump (i+1, j-2, level+1, node); jump (i-1, j+2, level+1, node); jump (i-1, j-2, level+1, node); } } } void Okno::search(QTreeWidgetItem *item, int i, int j, int level) { MyItem * node = dynamic_cast (item); if (node != NULL) { if (node->xx == i && node->yy == j && node->pole[i][j].len == level) { node->setSelected (true); on_treeWidget_itemClicked (node, 0); } else { int k = node->childCount(); for (int t = 0 ; t < k ; t++) search (node->child(t), i, j, level); } } } void Okno::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column) { MyItem * node = dynamic_cast (item); if (node != NULL) { ui->stateTable->clearContents (); for (int x = 0; x < n; x++) for (int y = 0; y < n; y++) { Info info = node->pole[x][y]; int level = info.len; if (level >= 0) { QTableWidgetItem * item = new QTableWidgetItem; item->setText (QString::number (level)); item->setBackgroundColor (color (level)); item->setToolTip(QString::number (info.from_line) + "," + QString::number (info.from_col) ); ui->stateTable->setItem (x, y, item); } } } } void Okno::on_tableWidget_cellDoubleClicked(int row, int column) { search (ui->treeWidget->topLevelItem(0), row, column, pole[row][column].len); } const int n = 8; class MyItem : public QTreeWidgetItem { public: Info pole [n][n]; }; QTableWidgetItem * item = new QTableWidgetItem; item->setText (QString::number (level)); item->setBackgroundColor (color (level)); ui->tableWidget->setItem (i, j, item); MyItem * above = node; node = new MyItem; node->setText (0, QString::number (level) + " : " + QString::number (i) + " , " + QString::number (j) ); node->setBackgroundColor (0, color (level)); if (above != NULL) above->addChild (node); else ui->treeWidget->addTopLevelItem (node); for (int x = 0; x < n; x++) for (int y = 0; y < n; y++) node->pole[x][y] = pole[x][y]; void Okno::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column) { MyItem * node = dynamic_cast (item); if (node != NULL) { ui->stateTable->clearContents (); for (int x = 0; x < n; x++) for (int y = 0; y < n; y++) { Info info = node->pole[x][y]; int level = info.len; if (level >= 0) { QTableWidgetItem * item = new QTableWidgetItem; item->setText (QString::number (level)); item->setBackgroundColor (color (level)); ui->stateTable->setItem (x, y, item); } } } } if (above) { pole[i][j].from_line = above->xx; pole[i][j].from_col = above->yy; item->setToolTip(QString::number (above->xx) + "," + QString::number (above->yy) ); } for (int x = 0; x < n; x++) for (int y = 0; y < n; y++) node->pole[x][y] = pole[x][y]; node->xx = i; node->yy = j;