# HG changeset patch # User Teemu Piippo # Date 1656876770 -10800 # Node ID 2aa15daa021614255c108cad0ab0ec7aa4abe0ce # Parent 65dbfcb859a733c01bdd791e954a35d538e6cf69 Add copy action diff -r 65dbfcb859a7 -r 2aa15daa0216 icons/copy.png Binary file icons/copy.png has changed diff -r 65dbfcb859a7 -r 2aa15daa0216 icons/cut.png Binary file icons/cut.png has changed diff -r 65dbfcb859a7 -r 2aa15daa0216 icons/paste.png Binary file icons/paste.png has changed diff -r 65dbfcb859a7 -r 2aa15daa0216 icons_svg/copy.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/icons_svg/copy.svg Sun Jul 03 22:32:50 2022 +0300 @@ -0,0 +1,61 @@ + + + + + ionicons-v5-e + + + + + + ionicons-v5-e + + + + diff -r 65dbfcb859a7 -r 2aa15daa0216 icons_svg/cut.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/icons_svg/cut.svg Sun Jul 03 22:32:50 2022 +0300 @@ -0,0 +1,78 @@ + + + + + ionicons-v5-h + + + + + + + + + + ionicons-v5-h + + + + diff -r 65dbfcb859a7 -r 2aa15daa0216 icons_svg/paste.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/icons_svg/paste.svg Sun Jul 03 22:32:50 2022 +0300 @@ -0,0 +1,91 @@ + + + + + ionicons-v5-l + + + + + + + + + + ionicons-v5-l + + + + diff -r 65dbfcb859a7 -r 2aa15daa0216 resources.qrc --- a/resources.qrc Sun Jul 03 22:24:12 2022 +0300 +++ b/resources.qrc Sun Jul 03 22:32:50 2022 +0300 @@ -33,5 +33,8 @@ icons/polyline.png icons/linetype-circularprimitive.png icons/appicon.png + icons/copy.png + icons/cut.png + icons/paste.png diff -r 65dbfcb859a7 -r 2aa15daa0216 src/main.cpp --- a/src/main.cpp Sun Jul 03 22:24:12 2022 +0300 +++ b/src/main.cpp Sun Jul 03 22:32:50 2022 +0300 @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -779,6 +780,21 @@ about(&mainWindow); } ); + QObject::connect( + ui.actionCopy, + &QAction::triggered, + [&]{ + if (Model* model = currentModelBody(&ui, &documents)) { + std::vector selectedRows = rows(ui.modelListView->selectionModel()->selectedRows()); + QString text; + for (int row : selectedRows) { + const std::size_t i = static_cast(row); + text += modelElementToString((*model)[i]); + text += QStringLiteral("\r\n"); + } + app.clipboard()->setText(text); + } + }); mainWindow.tabifyDockWidget(ui.messageLogDock, ui.toolOptionsDock); mainWindow.restoreGeometry(setting()); mainWindow.restoreState(setting()); diff -r 65dbfcb859a7 -r 2aa15daa0216 src/mainwindow.ui --- a/src/mainwindow.ui Sun Jul 03 22:24:12 2022 +0300 +++ b/src/mainwindow.ui Sun Jul 03 22:32:50 2022 +0300 @@ -88,10 +88,14 @@ Edit + + + + + - @@ -531,6 +535,42 @@ Ctrl+A + + + + :/icons/copy.png:/icons/copy.png + + + Copy + + + Ctrl+C + + + + + + :/icons/cut.png:/icons/cut.png + + + Cut + + + Ctrl+X + + + + + + :/icons/paste.png:/icons/paste.png + + + Paste + + + Ctrl+V + + diff -r 65dbfcb859a7 -r 2aa15daa0216 src/parser.cpp --- a/src/parser.cpp Sun Jul 03 22:24:12 2022 +0300 +++ b/src/parser.cpp Sun Jul 03 22:32:50 2022 +0300 @@ -53,7 +53,7 @@ { // Some LDraw parts such as 53588.dat can contain "BFC INVERTNEXT" with multiple inner whitespaces. // So we need to pass the string through QString::simplified to catch these cases. - const QString line = this->readLine().simplified(); + const QString line = this->readLine().trimmed(); if (line == "0 BFC INVERTNEXT" or line == "0 BFC CERTIFY INVERTNEXT") { invertNext = true; @@ -200,7 +200,6 @@ ModelElement parseLDrawLine(QString line) { - line = line.trimmed(); try { const QStringList tokens = line.simplified().split(" ");