1 /**
2 * UGENE - Integrated Bioinformatics Tools.
3 * Copyright (C) 2008-2021 UniPro <ugene@unipro.ru>
4 * http://ugene.net
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19 * MA 02110-1301, USA.
20 */
21
22 #include <drivers/GTKeyboardDriver.h>
23 #include <drivers/GTMouseDriver.h>
24 #include <primitives/GTTreeWidget.h>
25 #include <primitives/GTWidget.h>
26 #include <primitives/PopupChooser.h>
27 #include <utils/GTKeyboardUtils.h>
28 #include <utils/GTThread.h>
29 #include <utils/GTUtilsDialog.h>
30
31 #include <QMainWindow>
32 #include <QTreeWidget>
33
34 #include <U2Core/Annotation.h>
35 #include <U2Core/AnnotationGroup.h>
36 #include <U2Core/ProjectModel.h>
37 #include <U2Core/U2SafePoints.h>
38
39 #include <U2Gui/MainWindow.h>
40
41 #include <U2View/AnnotationsTreeView.h>
42
43 #include "GTUtilsAnnotationsTreeView.h"
44 #include "GTUtilsMdi.h"
45 #include "GTUtilsProjectTreeView.h"
46 #include "GTUtilsSequenceView.h"
47 #include "GTUtilsTaskTreeView.h"
48 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
49 #include "runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h"
50 #include "runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.h"
51
52 namespace U2 {
53 using namespace HI;
54
55 #define GT_CLASS_NAME "GTUtilsAnnotationsTreeView"
56
57 const QString GTUtilsAnnotationsTreeView::widgetName = "annotations_tree_widget";
58
59 #define GT_METHOD_NAME "getTreeWidget"
getTreeWidget(HI::GUITestOpStatus & os)60 QTreeWidget *GTUtilsAnnotationsTreeView::getTreeWidget(HI::GUITestOpStatus &os) {
61 QWidget *sequenceView = GTUtilsSequenceView::getActiveSequenceViewWindow(os);
62 QWidget *widget = GTWidget::findWidget(os, widgetName, sequenceView);
63 QTreeWidget *treeWidget = qobject_cast<QTreeWidget *>(widget);
64 GT_CHECK_RESULT(treeWidget != nullptr, QString("QTreeWidget '%1' not found").arg(widgetName), nullptr);
65 return treeWidget;
66 }
67 #undef GT_METHOD_NAME
68
69 #define GT_METHOD_NAME "addAnnotationsTableFromProject"
addAnnotationsTableFromProject(HI::GUITestOpStatus & os,const QString & tableName)70 void GTUtilsAnnotationsTreeView::addAnnotationsTableFromProject(HI::GUITestOpStatus &os, const QString &tableName) {
71 GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
72 GTUtilsProjectTreeView::dragAndDrop(os, GTUtilsProjectTreeView::findIndex(os, tableName), GTUtilsAnnotationsTreeView::getTreeWidget(os));
73 GTThread::waitForMainThread();
74 }
75 #undef GT_METHOD_NAME
76
77 #define GT_METHOD_NAME "getAVItemName"
getAVItemName(HI::GUITestOpStatus & os,AVItem * avItem)78 QString GTUtilsAnnotationsTreeView::getAVItemName(HI::GUITestOpStatus &os, AVItem *avItem) {
79 GT_CHECK_RESULT(avItem != nullptr, "avItem is NULL", "");
80
81 switch (avItem->type) {
82 case AVItemType_Annotation: {
83 AVAnnotationItem *avAnnotationItem = (AVAnnotationItem *)avItem;
84 GT_CHECK_RESULT(avAnnotationItem != nullptr, "avAnnotationItem is NULL", "");
85
86 Annotation *annotation = avAnnotationItem->annotation;
87 return annotation->getName();
88 } break;
89
90 case AVItemType_Group: {
91 AVGroupItem *avGroupItem = (AVGroupItem *)avItem;
92 GT_CHECK_RESULT(avGroupItem != nullptr, "avAnnotationItem is NULL", "");
93
94 AnnotationGroup *group = avGroupItem->group;
95 return group->getName();
96 } break;
97
98 case AVItemType_Qualifier: {
99 AVQualifierItem *avQualifierItem = (AVQualifierItem *)avItem;
100 GT_CHECK_RESULT(avQualifierItem != nullptr, "avQualifierItem is NULL", "");
101 return avQualifierItem->qName;
102 } break;
103
104 default:
105 break;
106 }
107
108 return "";
109 }
110 #undef GT_METHOD_NAME
111
112 #define GT_METHOD_NAME "getQualifierValue"
getQualifierValue(HI::GUITestOpStatus & os,const QString & qualifierName,QTreeWidgetItem * parentItem)113 QString GTUtilsAnnotationsTreeView::getQualifierValue(HI::GUITestOpStatus &os, const QString &qualifierName, QTreeWidgetItem *parentItem) {
114 GT_CHECK_RESULT(parentItem != nullptr, "Parent item is null", "");
115 QTreeWidgetItem *qualifierItem = findItem(os, qualifierName, parentItem);
116 return qualifierItem->text(AnnotationsTreeView::COLUMN_VALUE);
117 }
118 #undef GT_METHOD_NAME
119
120 #define GT_METHOD_NAME "getQualifierValue"
getQualifierValue(HI::GUITestOpStatus & os,const QString & qualName,const QString & parentName)121 QString GTUtilsAnnotationsTreeView::getQualifierValue(HI::GUITestOpStatus &os, const QString &qualName, const QString &parentName) {
122 QTreeWidgetItem *parent = findItem(os, parentName);
123 QTreeWidgetItem *qualItem = findItem(os, qualName, parent);
124 return qualItem->text(AnnotationsTreeView::COLUMN_VALUE);
125 }
126 #undef GT_METHOD_NAME
127
128 #define GT_METHOD_NAME "getAnnotatedRegions"
getAnnotatedRegions(HI::GUITestOpStatus & os)129 QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegions(HI::GUITestOpStatus &os) {
130 QList<U2Region> res;
131
132 QTreeWidget *treeWidget = getTreeWidget(os);
133 GT_CHECK_RESULT(treeWidget != nullptr, "Tree widget is NULL", res);
134
135 QList<QTreeWidgetItem *> treeItems = GTTreeWidget::getItems(treeWidget->invisibleRootItem());
136 foreach (QTreeWidgetItem *item, treeItems) {
137 AVAnnotationItem *annotationItem = dynamic_cast<AVAnnotationItem *>(item);
138 CHECK_OPERATION(annotationItem != nullptr, continue);
139
140 Annotation *ann = annotationItem->annotation;
141 res.append(ann->getRegions().toList());
142 }
143 return res;
144 }
145 #undef GT_METHOD_NAME
146
147 #define GT_METHOD_NAME "getSelectedAnnotatedRegions"
getSelectedAnnotatedRegions(HI::GUITestOpStatus & os)148 QList<U2Region> GTUtilsAnnotationsTreeView::getSelectedAnnotatedRegions(HI::GUITestOpStatus &os) {
149 QList<U2Region> res;
150
151 QTreeWidget *treeWidget = getTreeWidget(os);
152 GT_CHECK_RESULT(treeWidget != nullptr, "Tree widget is NULL", res);
153
154 QList<QTreeWidgetItem *> treeItems = GTTreeWidget::getItems(treeWidget->invisibleRootItem());
155 foreach (QTreeWidgetItem *item, treeItems) {
156 AVAnnotationItem *annotationItem = dynamic_cast<AVAnnotationItem *>(item);
157 CHECK_OPERATION(annotationItem != nullptr, continue);
158 CHECK_CONTINUE(annotationItem->isSelected());
159
160 Annotation *ann = annotationItem->annotation;
161 res.append(ann->getRegions().toList());
162 }
163 return res;
164 }
165 #undef GT_METHOD_NAME
166
167 #define GT_METHOD_NAME "getAnnotationRegionString"
getAnnotationRegionString(HI::GUITestOpStatus & os,const QString & annotationName)168 QString GTUtilsAnnotationsTreeView::getAnnotationRegionString(HI::GUITestOpStatus &os, const QString &annotationName) {
169 QTreeWidgetItem *annotationItem = findItem(os, annotationName);
170 GT_CHECK_RESULT(nullptr != annotationItem, "Annotation item is NULL", "");
171 return annotationItem->text(AnnotationsTreeView::COLUMN_VALUE);
172 }
173 #undef GT_METHOD_NAME
174
175 #define GT_METHOD_NAME "getAnnotationType"
getAnnotationType(HI::GUITestOpStatus & os,const QString & annotationName)176 QString GTUtilsAnnotationsTreeView::getAnnotationType(HI::GUITestOpStatus &os, const QString &annotationName) {
177 QTreeWidgetItem *annotationItem = findItem(os, annotationName);
178 GT_CHECK_RESULT(nullptr != annotationItem, "Annotation item is NULL", "");
179 return annotationItem->text(AnnotationsTreeView::COLUMN_TYPE);
180 }
181 #undef GT_METHOD_NAME
182
183 #define GT_METHOD_NAME "findFirstAnnotation"
findFirstAnnotation(HI::GUITestOpStatus & os,const GTGlobals::FindOptions & options)184 QTreeWidgetItem *GTUtilsAnnotationsTreeView::findFirstAnnotation(HI::GUITestOpStatus &os, const GTGlobals::FindOptions &options) {
185 QTreeWidget *treeWidget = getTreeWidget(os);
186 GT_CHECK_RESULT(treeWidget != nullptr, "Tree widget is NULL", nullptr);
187
188 QList<QTreeWidgetItem *> treeItems = GTTreeWidget::getItems(treeWidget->invisibleRootItem());
189 foreach (QTreeWidgetItem *item, treeItems) {
190 AVItem *avItem = dynamic_cast<AVItem *>(item);
191 GT_CHECK_RESULT(nullptr != avItem, "Cannot convert QTreeWidgetItem to AVItem", nullptr);
192 if (avItem->type == AVItemType_Annotation) {
193 return item;
194 }
195 }
196 GT_CHECK_RESULT(options.failIfNotFound == false, "No items in tree widget", nullptr);
197 return nullptr;
198 }
199 #undef GT_METHOD_NAME
200
201 #define GT_METHOD_NAME "findItem"
findItem(HI::GUITestOpStatus & os,const QString & itemName,const GTGlobals::FindOptions & options)202 QTreeWidgetItem *GTUtilsAnnotationsTreeView::findItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
203 GT_CHECK_RESULT(!itemName.isEmpty(), "Item name is empty", nullptr);
204
205 QTreeWidget *treeWidget = getTreeWidget(os);
206 QList<QTreeWidgetItem *> treeItems = GTTreeWidget::getItems(treeWidget->invisibleRootItem());
207 foreach (QTreeWidgetItem *item, treeItems) {
208 QString treeItemName = item->text(0);
209 if (treeItemName == itemName) {
210 return item;
211 }
212 }
213 GT_CHECK_RESULT(!options.failIfNotFound, QString("Item '%1' not found in tree widget").arg(itemName), nullptr);
214 return nullptr;
215 }
216 #undef GT_METHOD_NAME
217
218 #define GT_METHOD_NAME "findItem"
findItemWithIndex(HI::GUITestOpStatus & os,const QString & itemName,const int index)219 QTreeWidgetItem *GTUtilsAnnotationsTreeView::findItemWithIndex(HI::GUITestOpStatus &os, const QString &itemName, const int index) {
220 GT_CHECK_RESULT(itemName.isEmpty() == false, "Item name is empty", nullptr);
221
222 QTreeWidget *treeWidget = getTreeWidget(os);
223 GT_CHECK_RESULT(treeWidget != nullptr, "Tree widget is NULL", nullptr);
224
225 QList<QTreeWidgetItem *> treeItems = GTTreeWidget::getItems(treeWidget->invisibleRootItem());
226 int i = 0;
227 foreach (QTreeWidgetItem *item, treeItems) {
228 QString treeItemName = item->text(0);
229 if (treeItemName == itemName) {
230 i++;
231 if (i == index) {
232 return item;
233 }
234 }
235 }
236
237 return nullptr;
238 }
239 #undef GT_METHOD_NAME
240
241 #define GT_METHOD_NAME "findItem"
findItem(HI::GUITestOpStatus & os,const QString & itemName,QTreeWidgetItem * parentItem,const GTGlobals::FindOptions & options)242 QTreeWidgetItem *GTUtilsAnnotationsTreeView::findItem(HI::GUITestOpStatus &os, const QString &itemName, QTreeWidgetItem *parentItem, const GTGlobals::FindOptions &options) {
243 GT_CHECK_RESULT(!itemName.isEmpty(), "Item name is empty", nullptr);
244 if (parentItem == nullptr) {
245 return findItem(os, itemName, options);
246 }
247 QList<QTreeWidgetItem *> treeItems = GTTreeWidget::getItems(parentItem);
248 foreach (QTreeWidgetItem *item, treeItems) {
249 QString treeItemName = item->text(0);
250 if (treeItemName == itemName) {
251 return item;
252 }
253 }
254 GT_CHECK_RESULT(!options.failIfNotFound, "Item " + itemName + " not found in tree widget", nullptr);
255 return nullptr;
256 }
257
258 #undef GT_METHOD_NAME
259
260 #define GT_METHOD_NAME "findItems"
findItems(HI::GUITestOpStatus & os,const QString & itemName,const GTGlobals::FindOptions & options)261 QList<QTreeWidgetItem *> GTUtilsAnnotationsTreeView::findItems(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
262 QList<QTreeWidgetItem *> result;
263 GT_CHECK_RESULT(itemName.isEmpty() == false, "Item name is empty", result);
264
265 QTreeWidget *treeWidget = getTreeWidget(os);
266 GT_CHECK_RESULT(treeWidget != nullptr, "Tree widget is NULL", result);
267
268 QList<QTreeWidgetItem *> treeItems = GTTreeWidget::getItems(treeWidget->invisibleRootItem());
269 foreach (QTreeWidgetItem *item, treeItems) {
270 QString treeItemName = item->text(0);
271 if (treeItemName == itemName) {
272 result.append(item);
273 }
274 }
275 GT_CHECK_RESULT(!options.failIfNotFound || !result.isEmpty(), "Item " + itemName + " not found in tree widget", result);
276
277 return result;
278 }
279 #undef GT_METHOD_NAME
280
281 #define GT_METHOD_NAME "getGroupNames"
getGroupNames(HI::GUITestOpStatus & os,const QString & annotationTableName)282 QStringList GTUtilsAnnotationsTreeView::getGroupNames(HI::GUITestOpStatus &os, const QString &annotationTableName) {
283 QList<QTreeWidgetItem *> annotationTableItems;
284 if (!annotationTableName.isEmpty()) {
285 annotationTableItems << findItem(os, annotationTableName);
286 } else {
287 QTreeWidget *treeWidget = getTreeWidget(os);
288 QTreeWidgetItem *rootItem = treeWidget->invisibleRootItem();
289 for (int i = 0; i < rootItem->childCount(); i++) {
290 annotationTableItems << rootItem->child(i);
291 }
292 }
293
294 QStringList groupNames;
295 foreach (QTreeWidgetItem *annotationTableItem, annotationTableItems) {
296 for (int i = 0; i < annotationTableItem->childCount(); i++) {
297 groupNames << annotationTableItem->child(i)->text(AnnotationsTreeView::COLUMN_NAME);
298 }
299 }
300
301 return groupNames;
302 }
303 #undef GT_METHOD_NAME
304
305 #define GT_METHOD_NAME "getAnnotationNamesOfGroup"
getAnnotationNamesOfGroup(HI::GUITestOpStatus & os,const QString & groupName)306 QStringList GTUtilsAnnotationsTreeView::getAnnotationNamesOfGroup(HI::GUITestOpStatus &os, const QString &groupName) {
307 Q_UNUSED(os);
308 QStringList names;
309 QTreeWidgetItem *groupItem = findItem(os, groupName);
310 for (int i = 0; i < groupItem->childCount(); i++) {
311 AVItem *avItem = dynamic_cast<AVItem *>(groupItem->child(i));
312 GT_CHECK_RESULT(nullptr != avItem, "Cannot convert QTreeWidgetItem to AVItem", QStringList());
313 names << getAVItemName(os, avItem);
314 }
315 return names;
316 }
317 #undef GT_METHOD_NAME
318
319 #define GT_METHOD_NAME "getAnnotatedRegionsOfGroup"
getAnnotatedRegionsOfGroup(HI::GUITestOpStatus & os,const QString & groupName)320 QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegionsOfGroup(HI::GUITestOpStatus &os, const QString &groupName) {
321 Q_UNUSED(os);
322 QList<U2Region> regions;
323 QTreeWidgetItem *groupItem = findItem(os, groupName);
324 GT_CHECK_RESULT(groupItem != nullptr, QString("Cannot find group item '%1'").arg(groupName), regions);
325 for (int i = 0; i < groupItem->childCount(); i++) {
326 AVItem *avItem = dynamic_cast<AVItem *>(groupItem->child(i));
327 GT_CHECK_RESULT(nullptr != avItem, "Cannot convert QTreeWidgetItem to AVItem", QList<U2Region>());
328 AVAnnotationItem *item = (AVAnnotationItem *)avItem;
329 GT_CHECK_RESULT(item != nullptr, "sdf", regions);
330 regions << item->annotation->getRegions().toList();
331 }
332 return regions;
333 }
334 #undef GT_METHOD_NAME
335
336 #define GT_METHOD_NAME "getAnnotatedRegionsOfGroup"
getAnnotatedRegionsOfGroup(HI::GUITestOpStatus & os,const QString & groupName,const QString & parentName)337 QList<U2Region> GTUtilsAnnotationsTreeView::getAnnotatedRegionsOfGroup(HI::GUITestOpStatus &os, const QString &groupName, const QString &parentName) {
338 Q_UNUSED(os);
339 QList<U2Region> regions;
340 QTreeWidgetItem *parentItem = findItem(os, parentName);
341 GT_CHECK_RESULT(parentItem != nullptr, "Parent item not found!", regions);
342
343 QList<QTreeWidgetItem *> treeItems = GTTreeWidget::getItems(parentItem);
344 foreach (QTreeWidgetItem *childItem, treeItems) {
345 QString treeItemName = childItem->text(0);
346 if (treeItemName == groupName) {
347 for (int i = 0; i < childItem->childCount(); i++) {
348 AVItem *avItem = dynamic_cast<AVItem *>(childItem->child(i));
349 GT_CHECK_RESULT(nullptr != avItem, "Cannot convert QTreeWidgetItem to AVItem", QList<U2Region>());
350 AVAnnotationItem *item = (AVAnnotationItem *)avItem;
351 GT_CHECK_RESULT(item != nullptr, "sdf", regions);
352 regions << item->annotation->getRegions().toList();
353 }
354 }
355 }
356 return regions;
357 }
358 #undef GT_METHOD_NAME
359
360 #define GT_METHOD_NAME "findRegion"
findRegion(HI::GUITestOpStatus & os,const QString & itemName,const U2Region & r)361 bool GTUtilsAnnotationsTreeView::findRegion(HI::GUITestOpStatus &os, const QString &itemName, const U2Region &r) {
362 AVAnnotationItem *item = (AVAnnotationItem *)GTUtilsAnnotationsTreeView::findItem(os, itemName);
363 CHECK_SET_ERR_RESULT(item != nullptr, "Item " + itemName + " not found", false);
364 Annotation *ann = item->annotation;
365
366 U2Region neededRegion(r.startPos - 1, r.length - r.startPos + 1);
367
368 bool found = false;
369 QVector<U2Region> regions = ann->getRegions();
370 for (const U2Region &annotationRegion : qAsConst(regions)) {
371 if (annotationRegion.contains(neededRegion)) {
372 found = true;
373 break;
374 }
375 }
376
377 return found;
378 }
379 #undef GT_METHOD_NAME
380
381 #define GT_METHOD_NAME "getSelectedItem"
getSelectedItem(HI::GUITestOpStatus & os)382 QString GTUtilsAnnotationsTreeView::getSelectedItem(HI::GUITestOpStatus &os) {
383 QTreeWidget *treeWidget = getTreeWidget(os);
384 GT_CHECK_RESULT(treeWidget != nullptr, "Tree widget is NULL", nullptr);
385
386 QList<QTreeWidgetItem *> treeItems = GTTreeWidget::getItems(treeWidget->invisibleRootItem());
387 foreach (QTreeWidgetItem *item, treeItems) {
388 if (item->isSelected()) {
389 return getAVItemName(os, dynamic_cast<AVItem *>(item));
390 }
391 }
392
393 return QString();
394 }
395 #undef GT_METHOD_NAME
396
397 #define GT_METHOD_NAME "getAllSelectedItem"
getAllSelectedItems(HI::GUITestOpStatus & os)398 QList<QTreeWidgetItem *> GTUtilsAnnotationsTreeView::getAllSelectedItems(HI::GUITestOpStatus &os) {
399 QList<QTreeWidgetItem *> res;
400
401 QTreeWidget *treeWidget = getTreeWidget(os);
402 GT_CHECK_RESULT(treeWidget != nullptr, "Tree widget is NULL", res);
403
404 QList<QTreeWidgetItem *> treeItems = GTTreeWidget::getItems(treeWidget->invisibleRootItem());
405 foreach (QTreeWidgetItem *item, treeItems) {
406 if (item->isSelected()) {
407 QString s = item->text(0);
408 res << item;
409 }
410 }
411
412 return res;
413 }
414 #undef GT_METHOD_NAME
415
416 #define GT_METHOD_NAME "getItemCenter"
getItemCenter(HI::GUITestOpStatus & os,const QString & itemName)417 QPoint GTUtilsAnnotationsTreeView::getItemCenter(HI::GUITestOpStatus &os, const QString &itemName) {
418 QTreeWidgetItem *item = findItem(os, itemName);
419 GT_CHECK_RESULT(item != nullptr, "Item " + itemName + " is NULL", QPoint());
420
421 return GTTreeWidget::getItemCenter(os, item);
422 }
423 #undef GT_METHOD_NAME
424
425 #define GT_METHOD_NAME "createQualifier"
createQualifier(HI::GUITestOpStatus & os,const QString & qualName,const QString & qualValue,const QString & parentName)426 void GTUtilsAnnotationsTreeView::createQualifier(HI::GUITestOpStatus &os, const QString &qualName, const QString &qualValue, const QString &parentName) {
427 GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD"
428 << "add_qualifier_action"));
429 GTUtilsDialog::waitForDialog(os, new EditQualifierFiller(os, qualName, qualValue));
430 GTMouseDriver::moveTo(getItemCenter(os, parentName));
431 GTMouseDriver::click(Qt::RightButton);
432 }
433 #undef GT_METHOD_NAME
434
435 #define GT_METHOD_NAME "selectItems"
selectItems(HI::GUITestOpStatus & os,const QStringList & items)436 void GTUtilsAnnotationsTreeView::selectItems(HI::GUITestOpStatus &os, const QStringList &items) {
437 GT_CHECK_RESULT(items.size() != 0, "List of items to select is empty", );
438 // remove previous selection
439 QPoint firstItemCenterPoint = getItemCenter(os, items.first());
440 GTMouseDriver::moveTo(firstItemCenterPoint);
441 GTMouseDriver::click();
442 GTKeyboardDriver::keyPress(Qt::Key_Control);
443
444 for (const QString &item : qAsConst(items)) {
445 QPoint centerPoint = getItemCenter(os, item);
446 GTMouseDriver::moveTo(centerPoint);
447
448 QTreeWidgetItem *treeItem = findItem(os, item);
449 GT_CHECK_RESULT(treeItem != nullptr, "Tree item is NULL", );
450 if (!treeItem->isSelected()) {
451 GTMouseDriver::click();
452 }
453 }
454 GTKeyboardDriver::keyRelease(Qt::Key_Control);
455 GTGlobals::sleep();
456 }
457 #undef GT_METHOD_NAME
458
459 #define GT_METHOD_NAME "selectItems"
selectItems(HI::GUITestOpStatus & os,const QList<QTreeWidgetItem * > & items)460 void GTUtilsAnnotationsTreeView::selectItems(HI::GUITestOpStatus &os, const QList<QTreeWidgetItem *> &items) {
461 GT_CHECK_RESULT(items.size() != 0, "List of items to select is empty", );
462
463 // Remove previous selection.
464 QPoint firstItemCenterPoint = GTTreeWidget::getItemCenter(os, items.first());
465 GTMouseDriver::moveTo(firstItemCenterPoint);
466 GTMouseDriver::click();
467 GTKeyboardDriver::keyPress(Qt::Key_Control);
468
469 for (QTreeWidgetItem *item : qAsConst(items)) {
470 QPoint itemCenterPoint = GTTreeWidget::getItemCenter(os, item);
471 GTMouseDriver::moveTo(itemCenterPoint);
472
473 GT_CHECK_RESULT(item != nullptr, "Tree item is NULL", );
474 if (!item->isSelected()) {
475 GTMouseDriver::click();
476 }
477 }
478 GTKeyboardDriver::keyRelease(Qt::Key_Control);
479 GTThread::waitForMainThread();
480 }
481 #undef GT_METHOD_NAME
482
483 #define GT_METHOD_NAME "clickItem"
clickItem(HI::GUITestOpStatus & os,const QString & item,const int numOfItem,bool isDoubleClick)484 void GTUtilsAnnotationsTreeView::clickItem(HI::GUITestOpStatus &os, const QString &item, const int numOfItem, bool isDoubleClick) {
485 GT_CHECK_RESULT(!item.isEmpty(), "Empty item name", );
486
487 QTreeWidgetItem *wgtItem = findItemWithIndex(os, item, numOfItem);
488 GT_CHECK_RESULT(wgtItem != nullptr, "Item " + item + " is NULL", );
489
490 QPoint p = GTTreeWidget::getItemCenter(os, wgtItem);
491 GTMouseDriver::moveTo(p);
492 if (isDoubleClick) {
493 GTMouseDriver::doubleClick();
494 } else {
495 GTMouseDriver::click();
496 }
497 GTGlobals::sleep();
498 }
499 #undef GT_METHOD_NAME
500
501 #define GT_METHOD_NAME "createAnnotation"
createAnnotation(HI::GUITestOpStatus & os,const QString & groupName,const QString & annotationName,const QString & location,bool createNewTable,const QString & saveTo)502 void GTUtilsAnnotationsTreeView::createAnnotation(HI::GUITestOpStatus &os, const QString &groupName, const QString &annotationName, const QString &location, bool createNewTable, const QString &saveTo) {
503 QTreeWidget *annotationsTreeView = getTreeWidget(os);
504 GT_CHECK(nullptr != annotationsTreeView, "No annotation tree view");
505 GTWidget::click(os, annotationsTreeView);
506
507 GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, createNewTable, groupName, annotationName, location, saveTo));
508 GTKeyboardDriver::keyClick('n', Qt::ControlModifier);
509 }
510 #undef GT_METHOD_NAME
511
512 #define GT_METHOD_NAME "deleteItem"
deleteItem(HI::GUITestOpStatus & os,const QString & itemName)513 void GTUtilsAnnotationsTreeView::deleteItem(HI::GUITestOpStatus &os, const QString &itemName) {
514 deleteItem(os, findItem(os, itemName));
515 }
516 #undef GT_METHOD_NAME
517
518 #define GT_METHOD_NAME "deleteItem"
deleteItem(HI::GUITestOpStatus & os,QTreeWidgetItem * item)519 void GTUtilsAnnotationsTreeView::deleteItem(HI::GUITestOpStatus &os, QTreeWidgetItem *item) {
520 GT_CHECK(item != nullptr, "Item is NULL");
521 selectItems(os, QList<QTreeWidgetItem *>() << item);
522 GTKeyboardDriver::keyClick(Qt::Key_Delete);
523 GTGlobals::sleep(100);
524 GTUtilsTaskTreeView::waitTaskFinished(os);
525 }
526 #undef GT_METHOD_NAME
527
528 #define GT_METHOD_NAME "callContextMenuOnItem"
callContextMenuOnItem(HI::GUITestOpStatus & os,QTreeWidgetItem * item)529 void GTUtilsAnnotationsTreeView::callContextMenuOnItem(HI::GUITestOpStatus &os, QTreeWidgetItem *item) {
530 GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
531 GTMouseDriver::click(Qt::RightButton);
532 }
533 #undef GT_METHOD_NAME
534
535 #define GT_METHOD_NAME "callContextMenuOnItem"
callContextMenuOnItem(HI::GUITestOpStatus & os,const QString & itemName)536 void GTUtilsAnnotationsTreeView::callContextMenuOnItem(HI::GUITestOpStatus &os, const QString &itemName) {
537 GTMouseDriver::moveTo(getItemCenter(os, itemName));
538 GTMouseDriver::click(Qt::RightButton);
539 }
540 #undef GT_METHOD_NAME
541
542 #define GT_METHOD_NAME "callContextMenuOnQualifier"
callContextMenuOnQualifier(HI::GUITestOpStatus & os,const QString & parentName,const QString & qualifierName)543 void GTUtilsAnnotationsTreeView::callContextMenuOnQualifier(HI::GUITestOpStatus &os, const QString &parentName, const QString &qualifierName) {
544 getItemCenter(os, parentName);
545 callContextMenuOnItem(os, qualifierName);
546 }
547 #undef GT_METHOD_NAME
548
549 #define GT_METHOD_NAME "checkNoAnnotations"
checkNoAnnotations(HI::GUITestOpStatus & os)550 void GTUtilsAnnotationsTreeView::checkNoAnnotations(HI::GUITestOpStatus &os) {
551 QTreeWidgetItem *annotationItem = findFirstAnnotation(os, {false});
552 CHECK_SET_ERR(annotationItem == nullptr, "There should be no annotations");
553 }
554 #undef GT_METHOD_NAME
555
556 #undef GT_CLASS_NAME
557
558 } // namespace U2
559