insilmaril@377: #include "historywindow.h" insilmaril@381: #include "mapeditor.h" insilmaril@377: insilmaril@393: extern QString iconPath; insilmaril@393: insilmaril@377: HistoryWindow::HistoryWindow (QWidget *parent):QDialog (parent) insilmaril@377: { insilmaril@377: ui.setupUi (this); insilmaril@377: ui.historyTable->setRowCount (20); insilmaril@377: ui.historyTable->setColumnCount (3); insilmaril@377: insilmaril@377: insilmaril@377: QTableWidgetItem *item; insilmaril@377: insilmaril@388: item= new QTableWidgetItem(tr("Action","Table with actions")); insilmaril@377: ui.historyTable->setHorizontalHeaderItem(0, item); insilmaril@377: insilmaril@388: item= new QTableWidgetItem(tr("Comment","Table with actions")); insilmaril@377: ui.historyTable->setHorizontalHeaderItem(1, item); insilmaril@377: insilmaril@388: item= new QTableWidgetItem(tr("Undo action","Table with actions")); insilmaril@377: ui.historyTable->setHorizontalHeaderItem(2, item); insilmaril@377: insilmaril@377: ui.historyTable->setSelectionBehavior (QAbstractItemView::SelectRows); insilmaril@381: insilmaril@393: ui.undoButton->setIcon (QIcon(iconPath+"/undo.png")); insilmaril@393: ui.redoButton->setIcon (QIcon(iconPath+"/redo.png")); insilmaril@393: insilmaril@381: connect ( ui.undoButton, SIGNAL (clicked()), this, SLOT (undo())); insilmaril@381: connect ( ui.redoButton, SIGNAL (clicked()), this, SLOT (redo())); insilmaril@381: connect ( ui.historyTable, SIGNAL (itemSelectionChanged()), this, SLOT (select())); insilmaril@377: } insilmaril@377: insilmaril@377: insilmaril@388: void HistoryWindow::clearRow(int row) insilmaril@388: { insilmaril@388: QTableWidgetItem *it; insilmaril@388: it=ui.historyTable->item (row,0); insilmaril@388: if (it) it->setText (""); insilmaril@388: it=ui.historyTable->item (row,1); insilmaril@388: if (it) it->setText (""); insilmaril@388: it=ui.historyTable->item (row,2); insilmaril@388: if (it) it->setText (""); insilmaril@388: } insilmaril@388: insilmaril@381: void HistoryWindow::updateRow(int row, int step, SimpleSettings &set) insilmaril@381: { insilmaril@381: QTableWidgetItem *item; insilmaril@381: insilmaril@381: item= new QTableWidgetItem(set.readEntry(QString("/history/step-%1/redoCommand").arg(step))); insilmaril@381: ui.historyTable->setItem(row, 0, item); insilmaril@381: insilmaril@381: item= new QTableWidgetItem(set.readEntry(QString("/history/step-%1/comment").arg(step))); insilmaril@381: ui.historyTable->setItem(row, 1, item); insilmaril@381: insilmaril@381: item=new QTableWidgetItem(set.readEntry(QString("/history/step-%1/undoCommand").arg(step))); insilmaril@381: ui.historyTable->setItem(row, 2, item); insilmaril@381: } insilmaril@381: insilmaril@377: void HistoryWindow::update(SimpleSettings &set) insilmaril@377: { insilmaril@381: int undosAvail=set.readNumEntry("/history/undosAvail",0); insilmaril@381: int redosAvail=set.readNumEntry("/history/redosAvail",0); insilmaril@381: int stepsTotal=set.readNumEntry("/history/stepsTotal",0); insilmaril@381: int curStep=set.readNumEntry ("/history/curStep"); insilmaril@381: int i; insilmaril@381: int s=curStep; insilmaril@381: int r=undosAvail-1; insilmaril@381: QTableWidgetItem *item; insilmaril@377: insilmaril@381: // Update buttons insilmaril@381: if (undosAvail<1) insilmaril@381: ui.undoButton->setEnabled (false); insilmaril@381: else insilmaril@381: ui.undoButton->setEnabled (true); insilmaril@381: insilmaril@381: if (redosAvail<1) insilmaril@381: ui.redoButton->setEnabled (false); insilmaril@381: else insilmaril@381: ui.redoButton->setEnabled (true); insilmaril@381: insilmaril@388: // Update undos in table insilmaril@381: for (i=undosAvail; i>0; i--) insilmaril@377: { insilmaril@381: updateRow (r,s,set); insilmaril@381: r--; insilmaril@381: s--; insilmaril@381: if (s<1) s=stepsTotal; insilmaril@381: } insilmaril@381: insilmaril@381: // Generated the "now" row insilmaril@381: QColor c(255,200,120); insilmaril@381: for (i=0;i<=2;i++) insilmaril@381: { insilmaril@381: if (i!=1) insilmaril@381: { insilmaril@381: item=new QTableWidgetItem(""); insilmaril@381: item->setBackgroundColor (c); insilmaril@381: ui.historyTable->setItem(undosAvail, i, item); insilmaril@381: } insilmaril@381: } insilmaril@388: item=new QTableWidgetItem(" - " +tr("Current state","Current bar in history hwindow")+ " - "); insilmaril@381: item->setBackgroundColor (c); insilmaril@381: ui.historyTable->setItem(undosAvail, 1, item); insilmaril@377: insilmaril@377: insilmaril@388: // Update Redos in table insilmaril@381: s=curStep; insilmaril@381: s++; if (s>stepsTotal) s=1; insilmaril@381: for (i=1;i<= redosAvail; i++) insilmaril@381: { insilmaril@381: updateRow (undosAvail+i,s,set); insilmaril@381: s++; if (s>stepsTotal) s=1; insilmaril@377: } insilmaril@377: insilmaril@388: // Delete the rest insilmaril@388: for (i=undosAvail+redosAvail+1;i<= stepsTotal; i++) insilmaril@388: clearRow (i); insilmaril@388: insilmaril@377: ui.historyTable->resizeColumnsToContents(); insilmaril@377: } insilmaril@381: insilmaril@381: void HistoryWindow::setME (MapEditor *me) insilmaril@381: { insilmaril@381: mapEditor=me; insilmaril@381: } insilmaril@381: insilmaril@381: void HistoryWindow::setStepsTotal (int st) insilmaril@381: { insilmaril@381: // Number of steps + "current" bar insilmaril@381: ui.historyTable->setRowCount (st+1); insilmaril@381: insilmaril@381: } insilmaril@381: insilmaril@381: void HistoryWindow::undo() insilmaril@381: { insilmaril@381: mapEditor->undo(); insilmaril@381: } insilmaril@381: insilmaril@381: void HistoryWindow::redo() insilmaril@381: { insilmaril@381: mapEditor->redo(); insilmaril@381: } insilmaril@381: insilmaril@381: void HistoryWindow::select() insilmaril@381: { insilmaril@381: mapEditor->gotoStep (ui.historyTable->row (ui.historyTable->selectedItems().first())); insilmaril@381: }