// %flair:license{ // This file is part of the Flair framework distributed under the // CECILL-C License, Version 1.0. // %flair:license} #include "ListWidget.h" #include "Layout.h" #include #include #include #include #include #include #include ListWidget::ListWidget(Layout *parent, int row, int col, QString name) : FormLayout(parent, row, col, name, "ListWidget") { listwidget = new QListWidget(); object_layout->addRow(new QLabel(name)); object_layout->addRow(listwidget); list_red_pal.setColor(QPalette::HighlightedText, QColor(255, 0, 0)); list_black_pal.setColor(QPalette::HighlightedText, QColor(255, 255, 255)); current_item_row = -1; is_up_to_date = true; connect(listwidget, SIGNAL(currentRowChanged(int)), this, SLOT(SelectedItemChanged(int))); // to avoid duplicates when adding items SetIsExpandable(true); } ListWidget::ListWidget(Layout *parent, int row, int col, QString name, QStringList& items) : ListWidget(parent, row, col, name) { if (!items.isEmpty()) { listwidget->addItems(items); } } ListWidget::~ListWidget() { delete listwidget; } //received from the UAV / FlairCore void ListWidget::XmlEvent(QDomElement dom) { is_up_to_date = false; // if (dom.attribute("value") != "") { // int new_row = dom.attribute("value"); // listwidget->setCurrentRow(new_row); // } if (dom.attribute("item") != "") { QString item = dom.attribute("item"); QListWidgetItem* widget_item = new QListWidgetItem(item); widget_item->setForeground(Qt::red); listwidget->addItem(widget_item); } if (dom.attribute("delete") != "") { int row_to_del = dom.attribute("delete").toInt(); QListWidgetItem* item_to_del = listwidget->takeItem(row_to_del); if (item_to_del) { delete item_to_del; } } } void ListWidget::SetUptodate(void) { ui_to_var(); ui_to_xml(); listwidget->setPalette(list_black_pal); is_up_to_date = true; } void ListWidget::ui_to_var(void) { current_item_row = listwidget->currentRow(); } void ListWidget::ui_to_xml(void) { SetValue(QString::number(listwidget->currentRow())); //add the list of items for(int count = 0; count < listwidget->count(); count++) { std::string item; std::ostringstream item_prop; item_prop << "item" << count; SetAttribute(QString::fromStdString(item_prop.str()), listwidget->item(count)->text()); listwidget->item(count)->setForeground(Qt::black); } } void ListWidget::Reset(void) { if (current_item_row != -1) { listwidget->setCurrentRow(current_item_row); } } void ListWidget::LoadEvent(QDomElement dom) { std::cout << "In LoadEvent" << std::endl; // Parse the item list // QStringList items; // int count = 0; // while (dom.hasAttribute("item" + QString::number(count))) { // QString item = dom.attribute("item" + QString::number(count)); // std::cout << "Item" << count << " : " << item.toStdString() << std::endl; // items.append(item); // count++; // } // listwidget->addItems(items); // if (listwidget->isEnabled() == true) { // listwidget->setCurrentIndex((dom.attribute("value")).toInt()); // } } void ListWidget::SelectedItemChanged(int current_row) { if (current_row != current_item_row) { is_up_to_date = false; listwidget->setPalette(list_red_pal); } else { listwidget->setPalette(list_black_pal); } } bool ListWidget::IsUptodate(void) { return is_up_to_date; }