/*! create editor for tree widget item */ QWidget * CQPropertyDelegate:: createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &index) const { QTreeWidgetItem *item = getModelItem(index); assert(item); CQPropertyDelegate *th = const_cast<CQPropertyDelegate *>(this); QWidget *w = 0; if (CQPropertyItem::isType(item->type())) { CQPropertyItem *item1 = dynamic_cast<CQPropertyItem *>(item); assert(item1); if (index.column() == 1) w = item1->createEditor(parent); } else assert(false); if (w) { w->updateGeometry(); if (w->layout()) w->layout()->invalidate(); //w->setFixedSize(sizeHint(option, index)); w->installEventFilter(th); } return w; }
/*! draw item */ void CQPropertyDelegate:: paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QTreeWidgetItem *item = getModelItem(index); assert(item); //--- bool inside = tree_->isMouseInd(index); QBrush b; if (inside) { QVariant value = index.data(Qt::BackgroundRole); if (value.canConvert<QBrush>()) b = qvariant_cast<QBrush>(value); QColor c = option.palette.color(QPalette::Window); QBrush b1(c.darker(110)); item->setData(0, Qt::BackgroundRole, b1); item->setData(1, Qt::BackgroundRole, b1); } //--- if (CQPropertyItem::isType(item->type())) { CQPropertyItem *item1 = dynamic_cast<CQPropertyItem *>(item); assert(item1); QStyleOptionViewItem option1 = option; if (! item1->isWritable()) { option1.font.setItalic(true); } if (index.column() == 1) { if (! item1->paint(this, painter, option1, index)) QItemDelegate::paint(painter, option1, index); } else { QItemDelegate::paint(painter, option1, index); } } else QItemDelegate::paint(painter, option, index); //--- if (inside) { item->setData(0, Qt::BackgroundRole, b); item->setData(1, Qt::BackgroundRole, b); } }
void LVRMainWindow::renameModelItem() { QList<QTreeWidgetItem*> items = treeWidget->selectedItems(); if(items.size() > 0) { QTreeWidgetItem* item = items.first(); LVRModelItem* model_item = getModelItem(item); if(model_item != NULL) new LVRRenameDialog(model_item, treeWidget); } }
void LVRMainWindow::reconstructUsingExtendedMarchingCubes() { buildIncompatibilityBox(string("reconstruction"), POINTCLOUDS_AND_PARENT_ONLY); // Get selected item from tree and check type QList<QTreeWidgetItem*> items = treeWidget->selectedItems(); if(items.size() > 0) { LVRPointCloudItem* pc_item = getPointCloudItem(items.first()); LVRModelItem* parent_item = getModelItem(items.first()); if(pc_item != NULL) { LVRReconstructViaExtendedMarchingCubesDialog* dialog = new LVRReconstructViaExtendedMarchingCubesDialog("SF", pc_item, parent_item, treeWidget, qvtkWidget->GetRenderWindow()); return; } } m_incompatibilityBox->exec(); }
void LVRMainWindow::estimateNormals() { buildIncompatibilityBox(string("normal estimation"), POINTCLOUDS_AND_PARENT_ONLY); // Get selected item from tree and check type QList<QTreeWidgetItem*> items = treeWidget->selectedItems(); if(items.size() > 0) { LVRPointCloudItem* pc_item = getPointCloudItem(items.first()); LVRModelItem* parent_item = getModelItem(items.first()); if(pc_item != NULL) { LVREstimateNormalsDialog* dialog = new LVREstimateNormalsDialog(pc_item, parent_item, treeWidget, qvtkWidget->GetRenderWindow()); return; } } m_incompatibilityBox->exec(); }
void LVRMainWindow::removeArtifacts() { buildIncompatibilityBox(string("artifact removal"), MESHES_AND_PARENT_ONLY); // Get selected item from tree and check type QList<QTreeWidgetItem*> items = treeWidget->selectedItems(); if(items.size() > 0) { LVRMeshItem* mesh_item = getMeshItem(items.first()); LVRModelItem* parent_item = getModelItem(items.first()); if(mesh_item != NULL) { LVRRemoveArtifactsDialog* dialog = new LVRRemoveArtifactsDialog(mesh_item, parent_item, treeWidget, qvtkWidget->GetRenderWindow()); return; } } m_incompatibilityBox->exec(); }
/*! get tree widget item from index */ QTreeWidgetItem * CQPropertyDelegate:: getModelItem(const QModelIndex &index) const { QTreeWidgetItem *item; if (! index.parent().isValid()) item = tree_->topLevelItem(index.row()); else { QTreeWidgetItem *parent = getModelItem(index.parent()); assert(parent); item = parent->child(index.row()); } return item; }
/*! store displayed tree widget item data in model */ void CQPropertyDelegate:: setModelData(QWidget *, QAbstractItemModel *model, const QModelIndex &index) const { QTreeWidgetItem *item = getModelItem(index); assert(item); if (CQPropertyItem::isType(item->type())) { CQPropertyItem *item1 = dynamic_cast<CQPropertyItem *>(item); assert(item1); QVariant var = item1->getEditorData(); model->setData(index, var); } else assert(false); }
/*! get data to display in tree widget item */ void CQPropertyDelegate:: setEditorData(QWidget *, const QModelIndex &index) const { QTreeWidgetItem *item = getModelItem(index); assert(item); if (CQPropertyItem::isType(item->type())) { CQPropertyItem *item1 = dynamic_cast<CQPropertyItem *>(item); assert(item1); QVariant var = index.model()->data(index, Qt::DisplayRole); QString value; if (! CQUtil::variantToString(var, value)) std::cerr << "Failed to convert to string" << std::endl; item1->setEditorData(value); } else assert(false); }
void ZoneViewlet::enableRow(int index) { assert((index >= 0) && (index < tableModel.rowCount())); Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable; getModelItem(index, ZONETABLECOLUMN_DRY_SAMPLE)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_STATUS)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_WET_SAMPLE)->setFlags(flags); flags |= Qt::ItemIsEditable; getModelItem(index, ZONETABLECOLUMN_AFTERTOUCH)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_CHANNEL)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_CHANNEL_PRESSURE)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_NOTE)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_RELEASE_TIME)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_SAMPLE_TIME)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_VELOCITY)->setFlags(flags); for (int i = 0; i < 0x80; i++) { getModelItem(index, ZONETABLECOLUMN_CONTROL_0 + i)->setFlags(flags); } }
void ZoneViewlet::disableRow(int index) { assert((index >= 0) && (index < tableModel.rowCount())); Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable; getModelItem(index, ZONETABLECOLUMN_DRY_SAMPLE)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_STATUS)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_WET_SAMPLE)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_AFTERTOUCH)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_CHANNEL)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_CHANNEL_PRESSURE)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_NOTE)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_RELEASE_TIME)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_SAMPLE_TIME)->setFlags(flags); getModelItem(index, ZONETABLECOLUMN_VELOCITY)->setFlags(flags); for (int i = 0; i < 0x80; i++) { getModelItem(index, ZONETABLECOLUMN_CONTROL_0 + i)->setFlags(flags); } QModelIndex editIndex = tableDelegate.getEditIndex(); if (editIndex.isValid() && (editIndex.row() == index)) { tableView->closePersistentEditor(editIndex); } }
void editModel() { int width = 65, height = 22, i, j; /***** ncurses related variables */ WINDOW *editscr = popupWindow(width, height); int top = 0, current = 0; /***** menu selection related variables */ int max_view = 10; int request_finish = 0; /***** request_finish = 1 breaks the main while loop */ while (!request_finish) { wattrset (editscr, color_term ? COLOR_PAIR(2) | A_BOLD : A_NORMAL); /***** set bg color of the dialog */ /***** * draw a box around the dialog window * and empty it. *****/ werase (editscr); box (editscr, 0, 0); for (i = 1; i < width-1; i++) for (j = 1; j < height-1; j++) mvwaddch(editscr, j, i, ' '); /***** dialog header */ mvwaddstr(editscr, 1, 2, "Edit Speaker Model"); mvwaddseparator(editscr, 2, width); /***** display help at the bottom */ mvwaddseparator(editscr, height-4, width); mvwaddstr(editscr, height-3, 2, "a = add item, d = delete item, Enter = edit item"); mvwaddstr(editscr, height-2, 2, "b = back to main menu"); /***** display information about current speaker model in a table */ mvwaddstr(editscr, 4, 2, "Number of items:"); mvwaddint(editscr, 4, 19, model->number_of_items); mvwaddstr(editscr, 6, 4, "Label"); mvwaddch(editscr, 6,25, ACS_VLINE); mvwaddstr(editscr, 6,27, "Command"); mvwaddch(editscr, 6,48, ACS_VLINE); mvwaddstr(editscr, 6,50, "Samples"); /***** display table */ for (i = 0; i < 55; i++) mvwaddch(editscr, 7, 3+i, ACS_HLINE); mvwaddch(editscr, 7,25, ACS_PLUS); mvwaddch(editscr, 7,48, ACS_PLUS); for (i = 0; i < max_view; i++) { mvwaddch(editscr, 8+i, 25, ACS_VLINE); mvwaddch(editscr, 8+i, 48, ACS_VLINE); } /***** fill table */ for (i = 0; i < MIN2(model->number_of_items, max_view); i++) { setHighlight(editscr, active, i == current); mvwaddstr(editscr, 8+i, 3, " "); mvwaddstr(editscr, 8+i, 26, " "); mvwaddstr(editscr, 8+i, 49, " "); mvwaddnstr(editscr, 8+i, 4, getModelItem(model, top+i)->label, 20); mvwaddnstr(editscr, 8+i, 27, getModelItem(model, top+i)->command, 20); mvwaddint(editscr, 8+i, 53, getModelItem(model, top+i)->number_of_samples); } wattroff(editscr, A_REVERSE); /***** up/down arrows indicate that not all items can be displayed */ if (top > 0) { mvwaddch(editscr, 8, 2, ACS_UARROW); mvwaddch(editscr, 8+1, 2, ACS_VLINE); } if (model->number_of_items > max_view && top+max_view <= model->number_of_items-1) { mvwaddch(editscr, 8+max_view-2, 2, ACS_VLINE); mvwaddch(editscr, 8+max_view-1, 2, ACS_DARROW); } wmove(editscr, 1,21); /***** move cursor to an appropriate location */ wrefresh(editscr); /***** refresh dialog window */ /* process the command keystroke */ switch(getch()) { case KEY_UP: /***** cursor up */ if (top+current > 0) { if (current > 0) current--; else top--; } break; case KEY_DOWN: /***** cursor down */ if (top+current < model->number_of_items-1) { if (current < max_view-1) current++; else top++; } break; case 'b': /***** * allow leaving of the menu only if a predefined minimum amount of * sample utterances has been donated for each model item *****/ j = MIN_NR_SAMPLES_PER_ITEM; for (i = 0; i < model->number_of_items; i++) if (getModelItem(model, i)->number_of_samples < j) { j = 0; break; } if (j < MIN_NR_SAMPLES_PER_ITEM) /***** at least one model item doesn't meet requirements */ { int width = 42, height = 10, i, j; /***** ncurses related variables */ WINDOW *warnscr = popupWindow (width, height); char tmp_string[80]; wattrset (warnscr, color_term ? COLOR_PAIR(2) | A_BOLD : A_NORMAL); /***** set bg color of the dialog */ /***** * draw a box around the dialog window * and empty it. *****/ werase (warnscr); box (warnscr, 0, 0); for (i = 1; i < width-1; i++) for (j = 1; j < height-1; j++) mvwaddch(warnscr, j, i, ' '); /***** dialog header */ mvwaddstr(warnscr, 1, 2, "Warning!"); mvwaddseparator(warnscr, 2, width); /***** dialog message */ sprintf(tmp_string, "We need at least %d sample utterances", MIN_NR_SAMPLES_PER_ITEM); mvwaddstr(warnscr, 3, 2, tmp_string); mvwaddstr(warnscr, 4, 2,"for each speaker model item!!!"); mvwaddstr(warnscr, 5, 2,"Please donate the minimum number of "); mvwaddstr(warnscr, 6, 2,"samples before leaving this menu!"); mvwaddstrcntr(warnscr, 8, width, "Press any key to continue ..."); wmove(warnscr, 1, 11); /***** move cursor to an appropriate location */ wrefresh (warnscr); /***** refresh dialog window */ getch(); /***** wait for keyboard input */ delwin(warnscr); /***** delete ncurses dialog window */ } else request_finish = 1; /***** otherwise prepare to leave menu */ break; case ENTER: /***** edit the currently selected model item */ if (model->number_of_items > 0) editModelItem(getModelItem(model, top+current)); break; case 'a': /***** append a new item to the speaker model */ appendEmptyModelItem(model, "New Item", "New Command"); modified = 1; /***** switch 'modified' to 1 */ /***** set cursor to show new item */ current = model->number_of_items-1 - top; while (current > max_view-1) { current--; top++; } break; case 'd': /***** delete currently selected item from model */ deleteModelItem(model, top+current); modified = 1; /***** switch 'modified' to 1 */ /***** set cursor to a valid value */ if (top+current == model->number_of_items) { if (top > 0) top--; else if (current > 0) current--; } break; } } }