1 #include "TableMainWindow.h"
10 #include <QMessageBox>
13 #include <QTableWidget>
39 TableMainWindow::~TableMainWindow() {
44 void TableMainWindow::clear() {
57 result =
p_listWidget->findItems(QString(
"*"), Qt::MatchWrap | Qt::MatchWildcard);
62 void TableMainWindow::resizeColumn(
int columnIndex) {
63 QHeaderView* header =
p_table->horizontalHeader();
65 QString columnName(
p_table->model()->headerData(columnIndex, Qt::Horizontal).toString());
67 if (columnName.isEmpty())
72 if (header->sectionResizeMode(columnIndex) == QHeaderView:: ResizeToContents) {
73 header->setSectionResizeMode(columnIndex, QHeaderView::Interactive);
76 header->setSectionResizeMode(columnIndex, QHeaderView::ResizeToContents);
87 #if defined(__APPLE__)
88 setWindowFlags(Qt::Tool);
92 setWindowFlags(Qt::Dialog);
95 statusBar()->setSizeGripEnabled(
true);
97 p_table =
new QTableWidget(
this);
98 p_table->setAlternatingRowColors(
true);
100 QHeaderView* columnHeader =
p_table->horizontalHeader();
101 columnHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
102 connect ( columnHeader, SIGNAL( sectionPressed(
int) ),
103 this, SLOT( resizeColumn(
int) ) );
109 p_dock->setObjectName(
"dock");
110 p_dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
111 p_dock->setMinimumWidth(190);
114 addDockWidget(Qt::LeftDockWidgetArea,
p_dock, Qt::Vertical);
115 connect(
p_listWidget, SIGNAL(itemChanged(QListWidgetItem *)),
119 QMenuBar *menuBar = this->menuBar();
120 QMenu *fileMenu = menuBar->addMenu(
"&File");
123 p_save->setText(
"Save...");
124 p_save->setShortcut(Qt::CTRL + Qt::Key_S);
126 p_save->setDisabled(
true);
129 saveas->setText(
"Save As...");
130 connect(saveas, SIGNAL(triggered()),
this, SLOT(
saveAsTable()));
133 load->setText(
"Load...");
134 connect(load, SIGNAL(triggered()),
this, SLOT(
loadTable()));
137 del->setText(
"Delete Selected Row(s)");
138 del->setShortcut(Qt::Key_Delete);
139 connect(del, SIGNAL(triggered()),
this, SLOT(
deleteRows()));
142 clear->setText(
"Clear table");
143 clear->setShortcut(Qt::CTRL + Qt::Key_Delete);
144 connect(clear, SIGNAL(triggered()),
this, SLOT(
clearTable()));
147 close->setText(
"Close");
148 connect(close, SIGNAL(triggered()),
this, SLOT(hide()));
150 fileMenu->addAction(
p_save);
151 fileMenu->addAction(saveas);
152 fileMenu->addAction(load);
153 fileMenu->addAction(del);
154 fileMenu->addAction(clear);
155 fileMenu->addAction(close);
162 #if defined(__APPLE__)
164 toolBar->setObjectName(
"ToolBar");
165 toolBar->addAction(
p_save);
166 toolBar->addAction(saveas);
167 toolBar->addAction(load);
168 toolBar->addAction(del);
169 toolBar->addAction(clear);
170 toolBar->addAction(close);
171 this->addToolBar(toolBar);
175 QMenu *viewMenu = menuBar->addMenu(
"&View");
177 cols->setText(
"Columns");
178 connect(cols, SIGNAL(triggered()),
p_dock, SLOT(show()));
179 viewMenu->addAction(cols);
180 this->setMenuBar(menuBar);
181 installEventFilter(
this);
192 this->statusBar()->showMessage(message);
209 const QString &menuText,
int insertAt,
210 Qt::Orientation o, QString toolTip) {
212 int startCol =
p_table->columnCount();
214 for(
int i = 0; !heading.section(
":", i, i).isEmpty(); i++) {
215 QString htext = heading.section(
":", i, i);
217 int destinationColumn = insertAt;
220 p_table->insertColumn(insertAt);
223 destinationColumn = startCol + i;
224 p_table->insertColumn(startCol + i);
226 QTableWidgetItem *header =
new QTableWidgetItem(htext);
229 if (o == Qt::Horizontal) {
230 p_table->setHorizontalHeaderItem(insertAt, header);
233 p_table->setVerticalHeaderItem(insertAt, header);
238 if (o == Qt::Horizontal) {
239 p_table->setHorizontalHeaderItem(startCol + i, header);
242 p_table->setVerticalHeaderItem(startCol + i, header);
246 p_table->setColumnWidth(destinationColumn,
247 QFontMetrics(header->font()).width(header->text()) + 20);
252 int endCol =
p_table->columnCount() - 1;
255 if (!menuText.isEmpty()) {
256 QListWidgetItem *item =
new QListWidgetItem();
258 item->setText(menuText);
259 if (toolTip.isEmpty()) {
260 item->setToolTip(heading);
263 item->setToolTip(toolTip);
273 item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
292 if (this->isHidden()) {
299 int index = itemList().indexOf(item);
304 if (item->checkState() == Qt::Checked) {
305 p_table->setColumnHidden(col,
false);
309 p_table->setColumnHidden(col,
true);
328 int index = itemList().indexOf(item);
336 if (item->checkState() == Qt::Checked) {
337 p_table->setRowHidden(col,
false);
341 p_table->setRowHidden(col,
true);
360 bool vis =
p_table->isVisible();
395 if (
p_table->rowCount() == 0)
return;
396 for(
int r = 0; r <
p_table->rowCount(); r++) {
397 for(
int c = 0; c <
p_table->columnCount(); c++) {
398 p_table->item(r, c)->setText(
"");
402 p_table->scrollToItem(
p_table->item(0, 0), QAbstractItemView::PositionAtTop);
418 for(
int i = 0; i < list.size(); i++) {
434 for(
int r = 0; r <
p_table->rowCount(); r++) {
435 for(
int c = 0; c <
p_table->columnCount(); c++) {
453 if (!this->isVisible())
return;
455 for(
int c = 0; c <
p_table->columnCount(); c++) {
456 p_table->item(row, c)->setText(
"");
466 QString fn = QFileDialog::getSaveFileName((
QWidget *)parent(),
467 "Choose filename to save under",
469 "Text Files (*.txt)");
474 if (!fn.endsWith(
".txt")) {
475 filename = fn +
".txt";
502 QMessageBox::critical((
QWidget *)parent(),
503 "Error",
"Cannot open file, please check permissions");
505 p_save->setDisabled(
true);
515 for(
int i = 0; i <
p_table->columnCount(); i++) {
516 if (!
p_table->isColumnHidden(i)) {
517 QTableWidgetItem *header =
p_table->horizontalHeaderItem(i);
518 QString temp = header->text();
519 temp.replace(
"\n",
" ");
521 line = line +
"\"" + temp +
"\"";
525 line = line +
",\"" + temp +
"\"";
533 for(
int i = 0; i <
p_table->rowCount(); i++) {
538 for(
int j = 0; j <
p_table->columnCount(); j++) {
540 if (!
p_table->isColumnHidden(j)) {
541 if (
p_table->item(i, j) == 0)
break;
542 currentText =
p_table->item(i, j)->text();
545 line = line + currentText;
549 line = line +
"," + currentText;
554 if (line.split(
",", QString::SkipEmptyParts).count() != 0)
572 QListWidgetItem *item,
bool defaultChecked) {
573 QSettings settings(settingsFileName(), QSettings::NativeFormat);
575 QString itemTitle =
"item-" + item->text();
576 Qt::CheckState defaultState = defaultChecked? Qt::Checked : Qt::Unchecked;
577 Qt::CheckState state = (Qt::CheckState)
578 settings.value(itemTitle, defaultState).toInt();
579 item->setCheckState(state);
590 QHeaderView *header =
p_table->horizontalHeader();
591 QSettings settings(settingsFileName(), QSettings::NativeFormat);
593 for (
int columnIndex = 0; columnIndex <
p_table->model()->columnCount(); columnIndex++) {
595 QString headerName =
p_table->model()->headerData(columnIndex, Qt::Horizontal).toString();
596 QString settingName =
"column-" + headerName;
597 QString value = settings.value(settingName,
"auto").toString();
599 if (value ==
"auto" || value ==
"0") {
600 header->setSectionResizeMode(columnIndex, QHeaderView::ResizeToContents);
603 int width = value.toInt();
605 header->setSectionResizeMode(columnIndex, QHeaderView::Interactive);
606 p_table->setColumnWidth(columnIndex, width);
626 QSettings settings(settingsFileName(), QSettings::NativeFormat);
628 foreach (QListWidgetItem *item, itemList()) {
629 QString itemTitle =
"item-" + item->text();
630 settings.setValue(itemTitle, item->checkState());
633 QHeaderView *header =
p_table->horizontalHeader();
634 for(
int columnIndex = 0; columnIndex <
p_table->model()->columnCount(); columnIndex++)
636 QString headerName =
p_table->model()->headerData(columnIndex, Qt::Horizontal).toString();
637 QString settingName =
"column-" + headerName;
639 if (header->sectionResizeMode(columnIndex) == QHeaderView::ResizeToContents)
641 settings.setValue(settingName,
"auto");
645 settings.setValue( settingName, header->sectionSize(columnIndex) );
657 QString fn = QFileDialog::getOpenFileName((
QWidget *)parent(),
658 "Select file to load",
660 "Text Files (*.txt)");
663 if (fn.isEmpty())
return;
670 QMessageBox::critical((
QWidget *)parent(),
671 "Error",
"Cannot open file, please check permissions");
673 p_save->setDisabled(
true);
688 temp.remove(
"Positive ");
694 for(
int i = 0; i < list.count(); i++) {
695 for(
int j = 0; j < itemList().size(); j++) {
696 QListWidgetItem *item = itemList()[j];
699 if (item->text() ==
"Ground Range" && (list[i] ==
"Start Latitude" || list[i] ==
"Start Longitude" ||
700 list[i] ==
"End Latitude" || list[i] ==
"End Longitude")) {
701 item->setCheckState(Qt::Checked);
704 if (item->text() ==
"Pixel Range" && (list[i] ==
"Start Sample" || list[i] ==
"Start Line" ||
705 list[i] ==
"End Sample" || list[i] ==
"End Line")) {
706 item->setCheckState(Qt::Checked);
709 if (item->text() ==
"Pixel Range" && (list[i] ==
"Sample" || list[i] ==
"Line")) {
710 item->setCheckState(Qt::Checked);
713 if (item->text() ==
"Sample:Line" && (list[i] ==
"Sample" || list[i] ==
"Line")) {
714 item->setCheckState(Qt::Checked);
717 if (item->text() ==
"Planetocentric Lat" && list[i] ==
"Planetocentric Latitude") {
718 item->setCheckState(Qt::Checked);
721 if (item->text() ==
"Planetographic Lat" && list[i] ==
"Planetographic Latitude") {
722 item->setCheckState(Qt::Checked);
725 if (item->text() ==
"Projected X:Projected Y" && (list[i] ==
"Projected X" || list[i] ==
"Projected Y")) {
726 item->setCheckState(Qt::Checked);
729 if (item->text() ==
"Radius" && list[i] ==
"Local Radius") {
730 item->setCheckState(Qt::Checked);
733 if (item->text() ==
"XYZ" && (list[i] ==
"Point X" || list[i] ==
"Point Y" || list[i] ==
"Point Z")) {
734 item->setCheckState(Qt::Checked);
737 if (item->text() ==
"Ra:Dec" && (list[i] ==
"Right Ascension" || list[i] ==
"Declination")) {
738 item->setCheckState(Qt::Checked);
741 if (item->text() ==
"Spacecraft Position" && (list[i] ==
"Spacecraft X" || list[i] ==
"Spacecraft Y" || list[i] ==
"Spacecraft Z")) {
742 item->setCheckState(Qt::Checked);
745 if (item->text() ==
"Ephemeris Time" && list[i] ==
"Ephemeris Time") {
746 item->setCheckState(Qt::Checked);
749 if (item->text() ==
"Local Solar Time" && list[i] ==
"Local Solar Time") {
750 item->setCheckState(Qt::Checked);
753 if (item->text() ==
"Segments Sum" && list[i] ==
"Segments Sum km") {
754 item->setCheckState(Qt::Checked);
760 if (item->text() == list[i]) {
761 item->setCheckState(Qt::Checked);
768 for(
int cols = 0; cols <
p_table->columnCount(); cols++) {
769 QString header =
p_table->horizontalHeaderItem(cols)->text();
771 header.remove(
"Positive");
777 if (header == list[i]) {
778 column.push_back(cols);
784 if (!match) column.push_back(-1);
790 while(str.count() != 0) {
794 for(
int c = 0; c <
p_table->columnCount(); c++) {
795 QTableWidgetItem *item =
new QTableWidgetItem(
"");
797 if (c == 0)
p_table->scrollToItem(item);
805 for(
int i = 0; i < column.size(); i++) {
806 QTableWidgetItem *newItem =
new QTableWidgetItem(list[i]);
807 if (column[i] != -1) {
819 this->setWindowTitle(
p_title +
" : " + fn);
833 case QEvent::Close: {