Synchronize send to external editor buttons
Keep all buttons updated when using a multiple editor tabs mode.
This commit is contained in:
parent
a0711ebc8c
commit
db7d56c253
@ -2003,6 +2003,9 @@ void EditorPanel::sendToExternalChanged(int)
|
||||
index = -1;
|
||||
}
|
||||
options.externalEditorIndex = index;
|
||||
if (externalEditorChangedSignal) {
|
||||
externalEditorChangedSignal->emit();
|
||||
}
|
||||
}
|
||||
|
||||
void EditorPanel::sendToExternalPressed()
|
||||
@ -2069,6 +2072,23 @@ void EditorPanel::syncFileBrowser() // synchronize filebrowser with image in E
|
||||
}
|
||||
}
|
||||
|
||||
ExternalEditorChangedSignal * EditorPanel::getExternalEditorChangedSignal()
|
||||
{
|
||||
return externalEditorChangedSignal;
|
||||
}
|
||||
|
||||
void EditorPanel::setExternalEditorChangedSignal(ExternalEditorChangedSignal *signal)
|
||||
{
|
||||
if (externalEditorChangedSignal) {
|
||||
externalEditorChangedSignalConnection.disconnect();
|
||||
}
|
||||
externalEditorChangedSignal = signal;
|
||||
if (signal) {
|
||||
externalEditorChangedSignalConnection = signal->connect(
|
||||
sigc::mem_fun(*this, &EditorPanel::updateExternalEditorSelection));
|
||||
}
|
||||
}
|
||||
|
||||
void EditorPanel::histogramProfile_toggled()
|
||||
{
|
||||
options.rtSettings.HistogramWorking = toggleHistogramProfile->get_active();
|
||||
@ -2203,6 +2223,18 @@ void EditorPanel::onAppChooserDialogResponse(int responseId)
|
||||
}
|
||||
}
|
||||
|
||||
void EditorPanel::updateExternalEditorSelection()
|
||||
{
|
||||
int index = send_to_external->getSelected();
|
||||
if (index >= 0 && static_cast<unsigned>(index) == options.externalEditors.size()) {
|
||||
index = -1;
|
||||
}
|
||||
if (options.externalEditorIndex != index) {
|
||||
send_to_external->setSelected(
|
||||
options.externalEditorIndex >= 0 ? options.externalEditorIndex : options.externalEditors.size());
|
||||
}
|
||||
}
|
||||
|
||||
void EditorPanel::historyBeforeLineChanged (const rtengine::procparams::ProcParams& params)
|
||||
{
|
||||
|
||||
|
@ -38,6 +38,8 @@ template<typename T>
|
||||
class array2D;
|
||||
}
|
||||
|
||||
using ExternalEditorChangedSignal = sigc::signal<void>;
|
||||
|
||||
class BatchQueueEntry;
|
||||
class EditorPanel;
|
||||
class FilePanel;
|
||||
@ -66,6 +68,7 @@ class EditorPanel final :
|
||||
public rtengine::NonCopyable
|
||||
{
|
||||
public:
|
||||
|
||||
explicit EditorPanel (FilePanel* filePanel = nullptr);
|
||||
~EditorPanel () override;
|
||||
|
||||
@ -170,6 +173,10 @@ public:
|
||||
void openPreviousEditorImage ();
|
||||
void syncFileBrowser ();
|
||||
|
||||
// Signals.
|
||||
ExternalEditorChangedSignal * getExternalEditorChangedSignal();
|
||||
void setExternalEditorChangedSignal(ExternalEditorChangedSignal *signal);
|
||||
|
||||
void tbTopPanel_1_visible (bool visible);
|
||||
bool CheckSidePanelsVisibility();
|
||||
void tbShowHideSidePanels_managestate();
|
||||
@ -207,6 +214,7 @@ private:
|
||||
void histogramProfile_toggled ();
|
||||
Gtk::AppChooserDialog *getAppChooserDialog();
|
||||
void onAppChooserDialogResponse(int resposneId);
|
||||
void updateExternalEditorSelection();
|
||||
|
||||
|
||||
Glib::ustring lastSaveAsFileName;
|
||||
@ -242,6 +250,8 @@ private:
|
||||
Gtk::Button* navPrev;
|
||||
Glib::RefPtr<Gio::AppInfo> external_editor_info;
|
||||
std::unique_ptr<Gtk::AppChooserDialog> app_chooser_dialog;
|
||||
ExternalEditorChangedSignal *externalEditorChangedSignal;
|
||||
sigc::connection externalEditorChangedSignalConnection;
|
||||
|
||||
rtengine::InitialImage *cached_exported_image;
|
||||
rtengine::procparams::ProcParams cached_exported_pparams;
|
||||
|
@ -250,6 +250,7 @@ void EditWindow::addEditorPanel (EditorPanel* ep, const std::string &name)
|
||||
{
|
||||
ep->setParent (parent);
|
||||
ep->setParentWindow(this);
|
||||
ep->setExternalEditorChangedSignal(&externalEditorChangedSignal);
|
||||
|
||||
// construct closeable tab for the image
|
||||
Gtk::Box* hb = Gtk::manage (new Gtk::Box ());
|
||||
@ -288,6 +289,7 @@ void EditWindow::remEditorPanel (EditorPanel* ep)
|
||||
return; // Will crash if destroyed while loading
|
||||
}
|
||||
|
||||
ep->setExternalEditorChangedSignal(nullptr);
|
||||
epanels.erase (ep->getFileName());
|
||||
filesEdited.erase (ep->getFileName ());
|
||||
parent->fpanel->refreshEditedState (filesEdited);
|
||||
|
@ -39,6 +39,8 @@ private:
|
||||
std::set<Glib::ustring> filesEdited;
|
||||
std::map<Glib::ustring, EditorPanel*> epanels;
|
||||
|
||||
sigc::signal<void> externalEditorChangedSignal;
|
||||
|
||||
bool isFullscreen;
|
||||
bool isClosed;
|
||||
bool isMinimized;
|
||||
|
Loading…
x
Reference in New Issue
Block a user