Add ability to lock capture areas and capture them by hotkey
This commit is contained in:
		
							parent
							
								
									aac286df9d
								
							
						
					
					
						commit
						0738a88eb7
					
				@ -48,3 +48,8 @@ QString CaptureArea::toolTip() const
 | 
				
			|||||||
  return doTranslation_ ? sourceLanguage_ + "->" + targetLanguage_
 | 
					  return doTranslation_ ? sourceLanguage_ + "->" + targetLanguage_
 | 
				
			||||||
                        : sourceLanguage_;
 | 
					                        : sourceLanguage_;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool CaptureArea::isLocked() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return isLocked_;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@ public:
 | 
				
			|||||||
  TaskPtr task(const QPixmap& pixmap) const;
 | 
					  TaskPtr task(const QPixmap& pixmap) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bool isValid() const;
 | 
					  bool isValid() const;
 | 
				
			||||||
 | 
					  bool isLocked() const;
 | 
				
			||||||
  const QRect& rect() const;
 | 
					  const QRect& rect() const;
 | 
				
			||||||
  void setRect(const QRect& rect);
 | 
					  void setRect(const QRect& rect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -24,6 +25,7 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  QRect rect_;
 | 
					  QRect rect_;
 | 
				
			||||||
  bool doTranslation_;
 | 
					  bool doTranslation_;
 | 
				
			||||||
 | 
					  bool isLocked_{false};
 | 
				
			||||||
  LanguageId sourceLanguage_;
 | 
					  LanguageId sourceLanguage_;
 | 
				
			||||||
  LanguageId targetLanguage_;
 | 
					  LanguageId targetLanguage_;
 | 
				
			||||||
  QStringList translators_;
 | 
					  QStringList translators_;
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@ CaptureAreaEditor::CaptureAreaEditor(const CommonModels &models,
 | 
				
			|||||||
                                     QWidget *parent)
 | 
					                                     QWidget *parent)
 | 
				
			||||||
  : QWidget(parent)
 | 
					  : QWidget(parent)
 | 
				
			||||||
  , doTranslation_(new QCheckBox(tr("Translate:"), this))
 | 
					  , doTranslation_(new QCheckBox(tr("Translate:"), this))
 | 
				
			||||||
 | 
					  , isLocked_(new QCheckBox(tr("Save (can capture via hotkey)"), this))
 | 
				
			||||||
  , sourceLanguage_(new QComboBox(this))
 | 
					  , sourceLanguage_(new QComboBox(this))
 | 
				
			||||||
  , targetLanguage_(new QComboBox(this))
 | 
					  , targetLanguage_(new QComboBox(this))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -30,6 +31,9 @@ CaptureAreaEditor::CaptureAreaEditor(const CommonModels &models,
 | 
				
			|||||||
  layout->addWidget(doTranslation_, row, 0);
 | 
					  layout->addWidget(doTranslation_, row, 0);
 | 
				
			||||||
  layout->addWidget(targetLanguage_, row, 1);
 | 
					  layout->addWidget(targetLanguage_, row, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ++row;
 | 
				
			||||||
 | 
					  layout->addWidget(isLocked_, row, 0, 1, 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  sourceLanguage_->setModel(models.sourceLanguageModel());
 | 
					  sourceLanguage_->setModel(models.sourceLanguageModel());
 | 
				
			||||||
  targetLanguage_->setModel(models.targetLanguageModel());
 | 
					  targetLanguage_->setModel(models.targetLanguageModel());
 | 
				
			||||||
  targetLanguage_->setEnabled(doTranslation_->isChecked());
 | 
					  targetLanguage_->setEnabled(doTranslation_->isChecked());
 | 
				
			||||||
@ -59,6 +63,7 @@ void CaptureAreaEditor::swapLanguages()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void CaptureAreaEditor::set(const CaptureArea &area)
 | 
					void CaptureAreaEditor::set(const CaptureArea &area)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  isLocked_->setChecked(area.isLocked());
 | 
				
			||||||
  doTranslation_->setChecked(area.doTranslation_);
 | 
					  doTranslation_->setChecked(area.doTranslation_);
 | 
				
			||||||
  sourceLanguage_->setCurrentText(LanguageCodes::name(area.sourceLanguage_));
 | 
					  sourceLanguage_->setCurrentText(LanguageCodes::name(area.sourceLanguage_));
 | 
				
			||||||
  targetLanguage_->setCurrentText(LanguageCodes::name(area.targetLanguage_));
 | 
					  targetLanguage_->setCurrentText(LanguageCodes::name(area.targetLanguage_));
 | 
				
			||||||
@ -66,6 +71,7 @@ void CaptureAreaEditor::set(const CaptureArea &area)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void CaptureAreaEditor::apply(CaptureArea &area) const
 | 
					void CaptureAreaEditor::apply(CaptureArea &area) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  area.isLocked_ = isLocked_->isChecked();
 | 
				
			||||||
  area.doTranslation_ = doTranslation_->isChecked();
 | 
					  area.doTranslation_ = doTranslation_->isChecked();
 | 
				
			||||||
  area.sourceLanguage_ =
 | 
					  area.sourceLanguage_ =
 | 
				
			||||||
      LanguageCodes::idForName(sourceLanguage_->currentText());
 | 
					      LanguageCodes::idForName(sourceLanguage_->currentText());
 | 
				
			||||||
 | 
				
			|||||||
@ -22,6 +22,7 @@ private:
 | 
				
			|||||||
  void swapLanguages();
 | 
					  void swapLanguages();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QCheckBox* doTranslation_;
 | 
					  QCheckBox* doTranslation_;
 | 
				
			||||||
 | 
					  QCheckBox* isLocked_;
 | 
				
			||||||
  QComboBox* sourceLanguage_;
 | 
					  QComboBox* sourceLanguage_;
 | 
				
			||||||
  QComboBox* targetLanguage_;
 | 
					  QComboBox* targetLanguage_;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -35,6 +35,17 @@ void CaptureAreaSelector::activate()
 | 
				
			|||||||
  activateWindow();
 | 
					  activateWindow();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool CaptureAreaSelector::hasLocked() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return area_ && area_->isLocked();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CaptureAreaSelector::captureLocked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  SOFT_ASSERT(hasLocked(), return );
 | 
				
			||||||
 | 
					  capturer_.selected(*area_);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CaptureAreaSelector::setScreenRects(const std::vector<QRect> &screens)
 | 
					void CaptureAreaSelector::setScreenRects(const std::vector<QRect> &screens)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  auto helpRect = fontMetrics().boundingRect({}, 0, help_);
 | 
					  auto helpRect = fontMetrics().boundingRect({}, 0, help_);
 | 
				
			||||||
@ -150,7 +161,8 @@ void CaptureAreaSelector::drawCaptureArea(QPainter &painter,
 | 
				
			|||||||
void CaptureAreaSelector::showEvent(QShowEvent * /*event*/)
 | 
					void CaptureAreaSelector::showEvent(QShowEvent * /*event*/)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  editor_->hide();
 | 
					  editor_->hide();
 | 
				
			||||||
  area_.reset();
 | 
					  if (area_ && !area_->isLocked())
 | 
				
			||||||
 | 
					    area_.reset();
 | 
				
			||||||
  startSelectPos_ = currentSelectPos_ = QPoint();
 | 
					  startSelectPos_ = currentSelectPos_ = QPoint();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,8 @@ public:
 | 
				
			|||||||
  ~CaptureAreaSelector();
 | 
					  ~CaptureAreaSelector();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void activate();
 | 
					  void activate();
 | 
				
			||||||
 | 
					  bool hasLocked() const;
 | 
				
			||||||
 | 
					  void captureLocked();
 | 
				
			||||||
  void setScreenRects(const std::vector<QRect> &screens);
 | 
					  void setScreenRects(const std::vector<QRect> &screens);
 | 
				
			||||||
  void updateSettings();
 | 
					  void updateSettings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -28,6 +28,19 @@ void Capturer::capture()
 | 
				
			|||||||
  selector_->activate();
 | 
					  selector_->activate();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool Capturer::canCaptureLocked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  SOFT_ASSERT(selector_, return false);
 | 
				
			||||||
 | 
					  return selector_->hasLocked();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Capturer::captureLocked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  updatePixmap();
 | 
				
			||||||
 | 
					  SOFT_ASSERT(selector_, return );
 | 
				
			||||||
 | 
					  selector_->captureLocked();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Capturer::updatePixmap()
 | 
					void Capturer::updatePixmap()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  const auto screens = QApplication::screens();
 | 
					  const auto screens = QApplication::screens();
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,8 @@ public:
 | 
				
			|||||||
  ~Capturer();
 | 
					  ~Capturer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void capture();
 | 
					  void capture();
 | 
				
			||||||
 | 
					  bool canCaptureLocked();
 | 
				
			||||||
 | 
					  void captureLocked();
 | 
				
			||||||
  void repeatCapture();
 | 
					  void repeatCapture();
 | 
				
			||||||
  void updateSettings();
 | 
					  void updateSettings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -83,6 +83,8 @@ void Manager::updateSettings()
 | 
				
			|||||||
  recognizer_->updateSettings();
 | 
					  recognizer_->updateSettings();
 | 
				
			||||||
  translator_->updateSettings();
 | 
					  translator_->updateSettings();
 | 
				
			||||||
  representer_->updateSettings();
 | 
					  representer_->updateSettings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  tray_->setCaptureLockedEnabled(capturer_->canCaptureLocked());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Manager::setupProxy(const Settings &settings)
 | 
					void Manager::setupProxy(const Settings &settings)
 | 
				
			||||||
@ -145,6 +147,7 @@ void Manager::finishTask(const TaskPtr &task)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void Manager::captured(const TaskPtr &task)
 | 
					void Manager::captured(const TaskPtr &task)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  tray_->setCaptureLockedEnabled(capturer_->canCaptureLocked());
 | 
				
			||||||
  tray_->blockActions(false);
 | 
					  tray_->blockActions(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SOFT_ASSERT(task, return );
 | 
					  SOFT_ASSERT(task, return );
 | 
				
			||||||
@ -163,6 +166,7 @@ void Manager::captured(const TaskPtr &task)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void Manager::captureCanceled()
 | 
					void Manager::captureCanceled()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  tray_->setCaptureLockedEnabled(capturer_->canCaptureLocked());
 | 
				
			||||||
  tray_->blockActions(false);
 | 
					  tray_->blockActions(false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -235,6 +239,12 @@ void Manager::repeatCapture()
 | 
				
			|||||||
  capturer_->repeatCapture();
 | 
					  capturer_->repeatCapture();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Manager::captureLocked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  SOFT_ASSERT(capturer_, return );
 | 
				
			||||||
 | 
					  capturer_->captureLocked();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Manager::settings()
 | 
					void Manager::settings()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  SettingsEditor editor(*this, *updater_);
 | 
					  SettingsEditor editor(*this, *updater_);
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,7 @@ public:
 | 
				
			|||||||
  void fatalError(const QString &text);
 | 
					  void fatalError(const QString &text);
 | 
				
			||||||
  void capture();
 | 
					  void capture();
 | 
				
			||||||
  void repeatCapture();
 | 
					  void repeatCapture();
 | 
				
			||||||
 | 
					  void captureLocked();
 | 
				
			||||||
  void showLast();
 | 
					  void showLast();
 | 
				
			||||||
  void settings();
 | 
					  void settings();
 | 
				
			||||||
  void copyLastToClipboard();
 | 
					  void copyLastToClipboard();
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,7 @@ const QString qs_captureHotkey = "captureHotkey";
 | 
				
			|||||||
const QString qs_repeatCaptureHotkey = "repeatCaptureHotkey";
 | 
					const QString qs_repeatCaptureHotkey = "repeatCaptureHotkey";
 | 
				
			||||||
const QString qs_repeatHotkey = "repeatHotkey";
 | 
					const QString qs_repeatHotkey = "repeatHotkey";
 | 
				
			||||||
const QString qs_clipboardHotkey = "clipboardHotkey";
 | 
					const QString qs_clipboardHotkey = "clipboardHotkey";
 | 
				
			||||||
 | 
					const QString qs_captureLockedHotkey = "captureLockedHotkey";
 | 
				
			||||||
const QString qs_resultShowType = "resultShowType";
 | 
					const QString qs_resultShowType = "resultShowType";
 | 
				
			||||||
const QString qs_proxyType = "proxyType";
 | 
					const QString qs_proxyType = "proxyType";
 | 
				
			||||||
const QString qs_proxyHostName = "proxyHostName";
 | 
					const QString qs_proxyHostName = "proxyHostName";
 | 
				
			||||||
@ -145,6 +146,7 @@ void Settings::save() const
 | 
				
			|||||||
  settings.setValue(qs_repeatCaptureHotkey, repeatCaptureHotkey);
 | 
					  settings.setValue(qs_repeatCaptureHotkey, repeatCaptureHotkey);
 | 
				
			||||||
  settings.setValue(qs_repeatHotkey, showLastHotkey);
 | 
					  settings.setValue(qs_repeatHotkey, showLastHotkey);
 | 
				
			||||||
  settings.setValue(qs_clipboardHotkey, clipboardHotkey);
 | 
					  settings.setValue(qs_clipboardHotkey, clipboardHotkey);
 | 
				
			||||||
 | 
					  settings.setValue(qs_captureLockedHotkey, captureLockedHotkey);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  settings.setValue(qs_showMessageOnStart, showMessageOnStart);
 | 
					  settings.setValue(qs_showMessageOnStart, showMessageOnStart);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -225,6 +227,8 @@ void Settings::load()
 | 
				
			|||||||
  showLastHotkey = settings.value(qs_repeatHotkey, showLastHotkey).toString();
 | 
					  showLastHotkey = settings.value(qs_repeatHotkey, showLastHotkey).toString();
 | 
				
			||||||
  clipboardHotkey =
 | 
					  clipboardHotkey =
 | 
				
			||||||
      settings.value(qs_clipboardHotkey, clipboardHotkey).toString();
 | 
					      settings.value(qs_clipboardHotkey, clipboardHotkey).toString();
 | 
				
			||||||
 | 
					  captureLockedHotkey =
 | 
				
			||||||
 | 
					      settings.value(qs_captureLockedHotkey, captureLockedHotkey).toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  showMessageOnStart =
 | 
					  showMessageOnStart =
 | 
				
			||||||
      settings.value(qs_showMessageOnStart, showMessageOnStart).toBool();
 | 
					      settings.value(qs_showMessageOnStart, showMessageOnStart).toBool();
 | 
				
			||||||
 | 
				
			|||||||
@ -33,6 +33,7 @@ public:
 | 
				
			|||||||
  QString repeatCaptureHotkey{"Ctrl+Alt+S"};
 | 
					  QString repeatCaptureHotkey{"Ctrl+Alt+S"};
 | 
				
			||||||
  QString showLastHotkey{"Ctrl+Alt+X"};
 | 
					  QString showLastHotkey{"Ctrl+Alt+X"};
 | 
				
			||||||
  QString clipboardHotkey{"Ctrl+Alt+C"};
 | 
					  QString clipboardHotkey{"Ctrl+Alt+C"};
 | 
				
			||||||
 | 
					  QString captureLockedHotkey{"Ctrl+Alt+Q"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bool showMessageOnStart{true};
 | 
					  bool showMessageOnStart{true};
 | 
				
			||||||
  bool runAtSystemStart{false};
 | 
					  bool runAtSystemStart{false};
 | 
				
			||||||
 | 
				
			|||||||
@ -122,6 +122,8 @@ Settings SettingsEditor::settings() const
 | 
				
			|||||||
      ui->repeatCaptureEdit->keySequence().toString();
 | 
					      ui->repeatCaptureEdit->keySequence().toString();
 | 
				
			||||||
  settings.showLastHotkey = ui->repeatEdit->keySequence().toString();
 | 
					  settings.showLastHotkey = ui->repeatEdit->keySequence().toString();
 | 
				
			||||||
  settings.clipboardHotkey = ui->clipboardEdit->keySequence().toString();
 | 
					  settings.clipboardHotkey = ui->clipboardEdit->keySequence().toString();
 | 
				
			||||||
 | 
					  settings.captureLockedHotkey =
 | 
				
			||||||
 | 
					      ui->captureLockedEdit->keySequence().toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  settings.showMessageOnStart = ui->showOnStart->isChecked();
 | 
					  settings.showMessageOnStart = ui->showOnStart->isChecked();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -182,6 +184,7 @@ void SettingsEditor::setSettings(const Settings &settings)
 | 
				
			|||||||
  ui->repeatCaptureEdit->setKeySequence(settings.repeatCaptureHotkey);
 | 
					  ui->repeatCaptureEdit->setKeySequence(settings.repeatCaptureHotkey);
 | 
				
			||||||
  ui->repeatEdit->setKeySequence(settings.showLastHotkey);
 | 
					  ui->repeatEdit->setKeySequence(settings.showLastHotkey);
 | 
				
			||||||
  ui->clipboardEdit->setKeySequence(settings.clipboardHotkey);
 | 
					  ui->clipboardEdit->setKeySequence(settings.clipboardHotkey);
 | 
				
			||||||
 | 
					  ui->captureLockedEdit->setKeySequence(settings.captureLockedHotkey);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ui->showOnStart->setChecked(settings.showMessageOnStart);
 | 
					  ui->showOnStart->setChecked(settings.showMessageOnStart);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -56,37 +56,30 @@
 | 
				
			|||||||
          <string>Shortcuts</string>
 | 
					          <string>Shortcuts</string>
 | 
				
			||||||
         </property>
 | 
					         </property>
 | 
				
			||||||
         <layout class="QGridLayout" name="gridLayout">
 | 
					         <layout class="QGridLayout" name="gridLayout">
 | 
				
			||||||
          <item row="0" column="0">
 | 
					          <item row="4" column="1">
 | 
				
			||||||
           <widget class="QLabel" name="label">
 | 
					           <widget class="QKeySequenceEdit" name="clipboardEdit"/>
 | 
				
			||||||
            <property name="text">
 | 
					 | 
				
			||||||
             <string>Capture</string>
 | 
					 | 
				
			||||||
            </property>
 | 
					 | 
				
			||||||
           </widget>
 | 
					 | 
				
			||||||
          </item>
 | 
					          </item>
 | 
				
			||||||
          <item row="0" column="1">
 | 
					          <item row="2" column="0">
 | 
				
			||||||
           <widget class="QKeySequenceEdit" name="captureEdit"/>
 | 
					 | 
				
			||||||
          </item>
 | 
					 | 
				
			||||||
          <item row="1" column="0">
 | 
					 | 
				
			||||||
           <widget class="QLabel" name="label_8">
 | 
					           <widget class="QLabel" name="label_8">
 | 
				
			||||||
            <property name="text">
 | 
					            <property name="text">
 | 
				
			||||||
             <string>Repeat capture</string>
 | 
					             <string>Repeat capture</string>
 | 
				
			||||||
            </property>
 | 
					            </property>
 | 
				
			||||||
           </widget>
 | 
					           </widget>
 | 
				
			||||||
          </item>
 | 
					          </item>
 | 
				
			||||||
          <item row="1" column="1">
 | 
					          <item row="2" column="1">
 | 
				
			||||||
           <widget class="QKeySequenceEdit" name="repeatCaptureEdit"/>
 | 
					           <widget class="QKeySequenceEdit" name="repeatCaptureEdit"/>
 | 
				
			||||||
          </item>
 | 
					          </item>
 | 
				
			||||||
          <item row="2" column="0">
 | 
					          <item row="3" column="0">
 | 
				
			||||||
           <widget class="QLabel" name="label_3">
 | 
					           <widget class="QLabel" name="label_3">
 | 
				
			||||||
            <property name="text">
 | 
					            <property name="text">
 | 
				
			||||||
             <string>Show last result</string>
 | 
					             <string>Show last result</string>
 | 
				
			||||||
            </property>
 | 
					            </property>
 | 
				
			||||||
           </widget>
 | 
					           </widget>
 | 
				
			||||||
          </item>
 | 
					          </item>
 | 
				
			||||||
          <item row="2" column="1">
 | 
					          <item row="0" column="1">
 | 
				
			||||||
           <widget class="QKeySequenceEdit" name="repeatEdit"/>
 | 
					           <widget class="QKeySequenceEdit" name="captureEdit"/>
 | 
				
			||||||
          </item>
 | 
					          </item>
 | 
				
			||||||
          <item row="3" column="0">
 | 
					          <item row="4" column="0">
 | 
				
			||||||
           <widget class="QLabel" name="label_7">
 | 
					           <widget class="QLabel" name="label_7">
 | 
				
			||||||
            <property name="text">
 | 
					            <property name="text">
 | 
				
			||||||
             <string>Copy result to clipboard</string>
 | 
					             <string>Copy result to clipboard</string>
 | 
				
			||||||
@ -94,7 +87,24 @@
 | 
				
			|||||||
           </widget>
 | 
					           </widget>
 | 
				
			||||||
          </item>
 | 
					          </item>
 | 
				
			||||||
          <item row="3" column="1">
 | 
					          <item row="3" column="1">
 | 
				
			||||||
           <widget class="QKeySequenceEdit" name="clipboardEdit"/>
 | 
					           <widget class="QKeySequenceEdit" name="repeatEdit"/>
 | 
				
			||||||
 | 
					          </item>
 | 
				
			||||||
 | 
					          <item row="0" column="0">
 | 
				
			||||||
 | 
					           <widget class="QLabel" name="label">
 | 
				
			||||||
 | 
					            <property name="text">
 | 
				
			||||||
 | 
					             <string>Capture</string>
 | 
				
			||||||
 | 
					            </property>
 | 
				
			||||||
 | 
					           </widget>
 | 
				
			||||||
 | 
					          </item>
 | 
				
			||||||
 | 
					          <item row="1" column="0">
 | 
				
			||||||
 | 
					           <widget class="QLabel" name="label_22">
 | 
				
			||||||
 | 
					            <property name="text">
 | 
				
			||||||
 | 
					             <string>Capture saved areas</string>
 | 
				
			||||||
 | 
					            </property>
 | 
				
			||||||
 | 
					           </widget>
 | 
				
			||||||
 | 
					          </item>
 | 
				
			||||||
 | 
					          <item row="1" column="1">
 | 
				
			||||||
 | 
					           <widget class="QKeySequenceEdit" name="captureLockedEdit"/>
 | 
				
			||||||
          </item>
 | 
					          </item>
 | 
				
			||||||
         </layout>
 | 
					         </layout>
 | 
				
			||||||
        </widget>
 | 
					        </widget>
 | 
				
			||||||
 | 
				
			|||||||
@ -44,6 +44,9 @@ void TrayIcon::updateSettings()
 | 
				
			|||||||
    failedActions << settings_.showLastHotkey;
 | 
					    failedActions << settings_.showLastHotkey;
 | 
				
			||||||
  if (!GlobalAction::update(clipboardAction_, settings_.clipboardHotkey))
 | 
					  if (!GlobalAction::update(clipboardAction_, settings_.clipboardHotkey))
 | 
				
			||||||
    failedActions << settings_.clipboardHotkey;
 | 
					    failedActions << settings_.clipboardHotkey;
 | 
				
			||||||
 | 
					  if (!GlobalAction::update(captureLockedAction_,
 | 
				
			||||||
 | 
					                            settings_.captureLockedHotkey))
 | 
				
			||||||
 | 
					    failedActions << settings_.captureLockedHotkey;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!failedActions.isEmpty()) {
 | 
					  if (!failedActions.isEmpty()) {
 | 
				
			||||||
    showError(tr("Failed to register global shortcuts:\n%1")
 | 
					    showError(tr("Failed to register global shortcuts:\n%1")
 | 
				
			||||||
@ -63,6 +66,12 @@ void TrayIcon::setTaskActionsEnabled(bool isEnabled)
 | 
				
			|||||||
  updateActions();
 | 
					  updateActions();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TrayIcon::setCaptureLockedEnabled(bool isEnabled)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  canCaptureLocked_ = isEnabled;
 | 
				
			||||||
 | 
					  updateActions();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TrayIcon::setRepeatCaptureEnabled(bool isEnabled)
 | 
					void TrayIcon::setRepeatCaptureEnabled(bool isEnabled)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  canRepeatCapture_ = isEnabled;
 | 
					  canRepeatCapture_ = isEnabled;
 | 
				
			||||||
@ -73,7 +82,8 @@ void TrayIcon::updateActions()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  if (isActionsBlocked_) {
 | 
					  if (isActionsBlocked_) {
 | 
				
			||||||
    QVector<QAction *> blockable{captureAction_, repeatCaptureAction_,
 | 
					    QVector<QAction *> blockable{captureAction_, repeatCaptureAction_,
 | 
				
			||||||
                                 showLastAction_, settingsAction_};
 | 
					                                 showLastAction_, settingsAction_,
 | 
				
			||||||
 | 
					                                 captureLockedAction_};
 | 
				
			||||||
    for (auto &action : blockable) action->setEnabled(false);
 | 
					    for (auto &action : blockable) action->setEnabled(false);
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -85,6 +95,7 @@ void TrayIcon::updateActions()
 | 
				
			|||||||
  for (auto &action : taskActions) action->setEnabled(gotTask_);
 | 
					  for (auto &action : taskActions) action->setEnabled(gotTask_);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  repeatCaptureAction_->setEnabled(canRepeatCapture_);
 | 
					  repeatCaptureAction_->setEnabled(canRepeatCapture_);
 | 
				
			||||||
 | 
					  captureLockedAction_->setEnabled(canCaptureLocked_);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TrayIcon::setIcon(TrayIcon::Icon icon, Duration duration)
 | 
					void TrayIcon::setIcon(TrayIcon::Icon icon, Duration duration)
 | 
				
			||||||
@ -188,6 +199,11 @@ QMenu *TrayIcon::contextMenu()
 | 
				
			|||||||
    connect(repeatCaptureAction_, &QAction::triggered,  //
 | 
					    connect(repeatCaptureAction_, &QAction::triggered,  //
 | 
				
			||||||
            this, [this] { manager_.repeatCapture(); });
 | 
					            this, [this] { manager_.repeatCapture(); });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    captureLockedAction_ = menu->addAction(tr("Capture saved areas"));
 | 
				
			||||||
 | 
					    connect(captureLockedAction_, &QAction::triggered,  //
 | 
				
			||||||
 | 
					            this, [this] { manager_.captureLocked(); });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    QMenu *translateMenu = menu->addMenu(tr("Result"));
 | 
					    QMenu *translateMenu = menu->addMenu(tr("Result"));
 | 
				
			||||||
 | 
				
			|||||||
@ -17,6 +17,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  void blockActions(bool block);
 | 
					  void blockActions(bool block);
 | 
				
			||||||
  void setTaskActionsEnabled(bool isEnabled);
 | 
					  void setTaskActionsEnabled(bool isEnabled);
 | 
				
			||||||
 | 
					  void setCaptureLockedEnabled(bool isEnabled);
 | 
				
			||||||
  void setRepeatCaptureEnabled(bool isEnabled);
 | 
					  void setRepeatCaptureEnabled(bool isEnabled);
 | 
				
			||||||
  void setActiveTaskCount(int count);
 | 
					  void setActiveTaskCount(int count);
 | 
				
			||||||
  void resetFatalError();
 | 
					  void resetFatalError();
 | 
				
			||||||
@ -40,6 +41,7 @@ private:
 | 
				
			|||||||
  std::unique_ptr<QSystemTrayIcon> tray_;
 | 
					  std::unique_ptr<QSystemTrayIcon> tray_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  QAction *captureAction_{nullptr};
 | 
					  QAction *captureAction_{nullptr};
 | 
				
			||||||
 | 
					  QAction *captureLockedAction_{nullptr};
 | 
				
			||||||
  QAction *repeatCaptureAction_{nullptr};
 | 
					  QAction *repeatCaptureAction_{nullptr};
 | 
				
			||||||
  QAction *showLastAction_{nullptr};
 | 
					  QAction *showLastAction_{nullptr};
 | 
				
			||||||
  QAction *clipboardAction_{nullptr};
 | 
					  QAction *clipboardAction_{nullptr};
 | 
				
			||||||
@ -53,4 +55,5 @@ private:
 | 
				
			|||||||
  bool gotTask_{false};
 | 
					  bool gotTask_{false};
 | 
				
			||||||
  bool canRepeatCapture_{false};
 | 
					  bool canRepeatCapture_{false};
 | 
				
			||||||
  bool isActionsBlocked_{false};
 | 
					  bool isActionsBlocked_{false};
 | 
				
			||||||
 | 
					  bool canCaptureLocked_{false};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user