From ca4e2be3009cda8d86cac44ccec81cff9a07505f Mon Sep 17 00:00:00 2001 From: john-philipp <> Date: Mon, 9 Dec 2024 15:02:22 +0100 Subject: [PATCH] Adding --open-dir flag, hotkeys, many screenshots. --- src/MainFrame.ui | 6 ++++++ src/labeler.cpp | 26 +++++++++++++++++++++++++- src/widget/Mainframe.cpp | 33 ++++++++++++++++++++++++++++++++- src/widget/Mainframe.h | 3 ++- 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/src/MainFrame.ui b/src/MainFrame.ui index 6e79d27..06871ae 100644 --- a/src/MainFrame.ui +++ b/src/MainFrame.ui @@ -1525,6 +1525,9 @@ Center view + + Ctrl+g + @@ -1580,6 +1583,9 @@ screenshot + + Ctrl+B + diff --git a/src/labeler.cpp b/src/labeler.cpp index d7a73c3..465f296 100644 --- a/src/labeler.cpp +++ b/src/labeler.cpp @@ -4,13 +4,37 @@ #include +#define FLAG_OPEN_DIR "--open-dir" + +std::map parseArgs(int argc, char** argv) { + std::map parsedArgs; + + for (int i = 1; i < argc; i++) { + std::string flag = argv[i]; + if (flag == FLAG_OPEN_DIR) { + if (argc > i) { + parsedArgs[FLAG_OPEN_DIR] = argv[i++ + 1]; + } + } + } + + return parsedArgs; +} + int main(int argc, char** argv) { QApplication app(argc, argv); Mainframe frame; + auto parsedArgs = parseArgs(argc, argv); + + if (parsedArgs.find(FLAG_OPEN_DIR) != parsedArgs.end()) { + auto dir = parsedArgs[FLAG_OPEN_DIR]; + std::cout << "Opening dir: " << dir << std::endl; + frame.open(QString::fromStdString(dir)); + } + frame.show(); frame.resize(1200, 900); - // std::cout << glow::GlCapabilities::getInstance() << std::endl; return app.exec(); diff --git a/src/widget/Mainframe.cpp b/src/widget/Mainframe.cpp index a71338c..160d83e 100644 --- a/src/widget/Mainframe.cpp +++ b/src/widget/Mainframe.cpp @@ -9,11 +9,18 @@ #include #include #include +#include +#include #include #include "../data/label_utils.h" #include "../data/misc.h" +#include +#include +#include +#include + using namespace glow; // see https://stackoverflow.com/a/24349347 @@ -477,6 +484,17 @@ Mainframe::Mainframe() : mChangesSinceLastSave(false) { connect(ui.actionScreenshot, &QAction::triggered, [this]() { QImage img = ui.mViewportXYZ->grabFrameBuffer(); + + auto now = std::chrono::system_clock::now(); + std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); + + // Convert to tm struct for formatting + std::tm now_tm = *std::localtime(&now_time_t); + + // Create a stringstream to format the timestamp + std::ostringstream oss; + oss << "screenshot-" << std::put_time(&now_tm, "%Y-%m-%dT%H:%M:%S") << ".png"; + img.save(QString::fromStdString(oss.str())); img.save("screenshot.png"); QApplication::clipboard()->setImage(img); }); @@ -505,6 +523,10 @@ void Mainframe::closeEvent(QCloseEvent* event) { } void Mainframe::open() { + this->open(nullptr); +} + +void Mainframe::open(QString dir) { if (readerFuture_.valid()) readerFuture_.wait(); if (mChangesSinceLastSave) { @@ -520,8 +542,13 @@ void Mainframe::open() { } } - QString retValue = + QString retValue; + if (dir == nullptr) { + retValue = QFileDialog::getExistingDirectory(this, "Select scan directory", lastDirectory, QFileDialog::ShowDirsOnly); + } else { + retValue = dir; + } if (!retValue.isNull()) { QDir base_dir(retValue); @@ -1220,3 +1247,7 @@ void Mainframe::updateLabelButtons() { index - std::floor((double)index / btnsPerRow) * btnsPerRow); } } + +void Mainframe::setLastDirectory(QString lastDirectory) { + this->lastDirectory = lastDirectory; +} diff --git a/src/widget/Mainframe.h b/src/widget/Mainframe.h index 6f19565..ee6dcc6 100644 --- a/src/widget/Mainframe.h +++ b/src/widget/Mainframe.h @@ -25,12 +25,14 @@ class Mainframe : public QMainWindow { public slots: void open(); + void open(QString dir); void save(); void changeRadius(int radius); void changeMode(int mode, bool checked); void updateFiltering(bool value); void labelBtnReleased(QWidget*); + void setLastDirectory(QString lastDirectory); signals: void readerStarted(); @@ -53,7 +55,6 @@ class Mainframe : public QMainWindow { void closeEvent(QCloseEvent* event); void readConfig(); - void initializeIcons(); void updateMovingStatus(bool isMoving);