diff options
-rw-r--r-- | ui/qt/main_window.h | 6 | ||||
-rw-r--r-- | ui/qt/main_window.ui | 12 | ||||
-rw-r--r-- | ui/qt/main_window_slots.cpp | 46 | ||||
-rw-r--r-- | ui/qt/proto_tree.cpp | 2 |
4 files changed, 65 insertions, 1 deletions
diff --git a/ui/qt/main_window.h b/ui/qt/main_window.h index afac3115e2..f188a30ab9 100644 --- a/ui/qt/main_window.h +++ b/ui/qt/main_window.h @@ -101,6 +101,8 @@ private: }; enum CopySelected { + CopyAllVisibleItems, + CopyAllVisibleSelectedTreeItems, CopySelectedDescription, CopySelectedFieldName, CopySelectedValue @@ -175,6 +177,8 @@ private: void setForCaptureInProgress(gboolean capture_in_progress = false); QMenu* findOrAddMenu(QMenu *parent_menu, QString& menu_text); + void recursiveCopyProtoTreeItems(QTreeWidgetItem *item, QString &clip, int ident_level); + signals: void showProgress(struct progdlg **dlg_p, bool animate, const QString message, bool terminate_is_stop, bool *stop_flag, float pct); void setCaptureFile(capture_file *cf); @@ -276,6 +280,8 @@ private slots: void on_actionFileExportSSLSessionKeys_triggered(); void actionEditCopyTriggered(MainWindow::CopySelected selection_type); + void on_actionCopyAllVisibleItems_triggered(); + void on_actionCopyAllVisibleSelectedTreeItems_triggered(); void on_actionEditCopyDescription_triggered(); void on_actionEditCopyFieldName_triggered(); void on_actionEditCopyValue_triggered(); diff --git a/ui/qt/main_window.ui b/ui/qt/main_window.ui index 6a9901a3a4..a5abbd029e 100644 --- a/ui/qt/main_window.ui +++ b/ui/qt/main_window.ui @@ -477,6 +477,8 @@ <property name="title"> <string>Copy</string> </property> + <addaction name="actionCopyAllVisibleItems"/> + <addaction name="actionCopyAllVisibleSelectedTreeItems"/> <addaction name="actionEditCopyDescription"/> <addaction name="actionEditCopyFieldName"/> <addaction name="actionEditCopyValue"/> @@ -1061,6 +1063,16 @@ <string>Ctrl+Shift+D</string> </property> </action> + <action name="actionCopyAllVisibleItems"> + <property name="text"> + <string>Copy All Visible Items</string> + </property> + </action> + <action name="actionCopyAllVisibleSelectedTreeItems"> + <property name="text"> + <string>Copy All Visible Selected Tree Items</string> + </property> + </action> <action name="actionEditCopyFieldName"> <property name="text"> <string>Field Name</string> diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp index 7975d3eb89..67beea066e 100644 --- a/ui/qt/main_window_slots.cpp +++ b/ui/qt/main_window_slots.cpp @@ -1181,7 +1181,8 @@ void MainWindow::setMenusForSelectedTreeRow(field_info *fi) { // set_menu_sensitivity(ui_manager_main_menubar, // "/Menubar/GoMenu/GotoCorrespondingPacket", hfinfo->type == FT_FRAMENUM); - + main_ui_->actionCopyAllVisibleItems->setEnabled(true); + main_ui_->actionCopyAllVisibleSelectedTreeItems->setEnabled(can_match_selected); main_ui_->actionEditCopyDescription->setEnabled(can_match_selected); main_ui_->actionEditCopyFieldName->setEnabled(can_match_selected); main_ui_->actionEditCopyValue->setEnabled(can_match_selected); @@ -1240,6 +1241,11 @@ void MainWindow::setMenusForSelectedTreeRow(field_info *fi) { main_ui_->actionFileExportPacketBytes->setEnabled(false); // set_menu_sensitivity(ui_manager_main_menubar, // "/Menubar/GoMenu/GotoCorrespondingPacket", FALSE); + if (capture_file_.capFile() != NULL) + main_ui_->actionCopyAllVisibleItems->setEnabled(true); + else + main_ui_->actionCopyAllVisibleItems->setEnabled(false); + main_ui_->actionCopyAllVisibleSelectedTreeItems->setEnabled(false); main_ui_->actionEditCopyDescription->setEnabled(false); main_ui_->actionEditCopyFieldName->setEnabled(false); main_ui_->actionEditCopyValue->setEnabled(false); @@ -1669,6 +1675,18 @@ void MainWindow::on_actionFilePrint_triggered() // Edit Menu +void MainWindow::recursiveCopyProtoTreeItems(QTreeWidgetItem *item, QString &clip, int ident_level) { + if (!item->isExpanded()) return; + + for (int i_item = 0; i_item < item->childCount(); i_item += 1) { + clip.append(QString(" ").repeated(ident_level)); + clip.append(item->child(i_item)->text(0)); + clip.append("\n"); + + recursiveCopyProtoTreeItems(item->child(i_item), clip, ident_level + 1); + } +} + // XXX This should probably be somewhere else. void MainWindow::actionEditCopyTriggered(MainWindow::CopySelected selection_type) { @@ -1696,6 +1714,22 @@ void MainWindow::actionEditCopyTriggered(MainWindow::CopySelected selection_type g_free(field_str); } break; + case CopyAllVisibleItems: + for (int i_item = 0; i_item < proto_tree_->topLevelItemCount(); i_item += 1) { + clip.append(proto_tree_->topLevelItem(i_item)->text(0)); + clip.append("\n"); + + recursiveCopyProtoTreeItems(proto_tree_->topLevelItem(i_item), clip, 1); + } + + break; + case CopyAllVisibleSelectedTreeItems: + clip.append(proto_tree_->currentItem()->text(0)); + clip.append("\n"); + + recursiveCopyProtoTreeItems(proto_tree_->currentItem(), clip, 1); + + break; } if (clip.length() == 0) { @@ -1712,6 +1746,16 @@ void MainWindow::actionEditCopyTriggered(MainWindow::CopySelected selection_type } } +void MainWindow::on_actionCopyAllVisibleItems_triggered() +{ + actionEditCopyTriggered(CopyAllVisibleItems); +} + +void MainWindow::on_actionCopyAllVisibleSelectedTreeItems_triggered() +{ + actionEditCopyTriggered(CopyAllVisibleSelectedTreeItems); +} + void MainWindow::on_actionEditCopyDescription_triggered() { actionEditCopyTriggered(CopySelectedDescription); diff --git a/ui/qt/proto_tree.cpp b/ui/qt/proto_tree.cpp index 94d84399be..ed07e0e36b 100644 --- a/ui/qt/proto_tree.cpp +++ b/ui/qt/proto_tree.cpp @@ -222,6 +222,8 @@ ProtoTree::ProtoTree(QWidget *parent) : submenu = new QMenu(); action->setMenu(submenu); ctx_menu_.addAction(action); + submenu->addAction(window()->findChild<QAction *>("actionCopyAllVisibleItems")); + submenu->addAction(window()->findChild<QAction *>("actionCopyAllVisibleSelectedTreeItems")); submenu->addAction(window()->findChild<QAction *>("actionEditCopyDescription")); submenu->addAction(window()->findChild<QAction *>("actionEditCopyFieldName")); submenu->addAction(window()->findChild<QAction *>("actionEditCopyValue")); |