Skip to content

Commit

Permalink
updateDmsToolbarButtonVisualStates now reconnects the MpaView toolbut…
Browse files Browse the repository at this point in the history
…tons to the MapView state.
  • Loading branch information
MaartenHilferink committed Jul 5, 2024
1 parent 81a65fe commit 26ed9ef
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 73 deletions.
121 changes: 51 additions & 70 deletions qtgui/exe/src/DmsToolbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ void DmsToolbuttonAction::onToolbuttonPressed() {

try {
SuspendTrigger::Resume();
dms_view_area->getDataView()->GetContents()->OnCommand(m_data.ids[m_state]);
if (auto dv = dms_view_area->getDataView())
dv->GetContents()->OnCommand(m_data.ids[m_state]);
if (m_state < m_data.icons.size())
setIcon(QIcon(m_data.icons[m_state]));
}
Expand Down Expand Up @@ -189,27 +190,6 @@ auto getToolbarButtonData(ToolButtonID button_id) -> ToolbarButtonData {
return {};
}

void updateDmsToolbarButtonVisualStates() {
/*auto dms_view_area = getActiveDmsViewArea();
auto dv = dms_view_area->getDataView();
auto is_command_enabled = dv->OnCommandEnable(button_id) == CommandStatus::ENABLED;
if (!is_command_enabled)
action->setDisabled(true);
for (auto action : MainWindow::TheOne()->m_toolbar->actions()) {
auto other_action = dynamic_cast<DmsToolbuttonAction*>(action);
if (!other_action)
continue;
bool other_is_pan_action = other_action->m_data.id == TB_Pan;
if (activate_pan_tool && other_is_pan_action)
other_action->setChecked(true);
else
other_action->setChecked(false);
other_action->m_state = 0;
}*/
}

void updateDmsToolbar() {
auto main_window = MainWindow::TheOne();

Expand All @@ -221,11 +201,6 @@ void updateDmsToolbar() {
if (!active_mdi_subwindow)
clearToolbarUpToDetailPagesTools();

if (main_window->m_tooled_mdi_subwindow == active_mdi_subwindow) { // Update button state
updateDmsToolbarButtonVisualStates();
return;
}

auto view_style = ViewStyle::tvsUndefined;

main_window->m_tooled_mdi_subwindow = active_mdi_subwindow;
Expand All @@ -239,58 +214,64 @@ void updateDmsToolbar() {
view_style = dv->GetViewType();
}

// get viewstyle from property
if (main_window->m_tooled_mdi_subwindow && view_style == ViewStyle::tvsUndefined)
view_style = static_cast<ViewStyle>(main_window->m_tooled_mdi_subwindow->property("viewstyle").value<QVariant>().toInt());

if (view_style == ViewStyle::tvsUndefined) // No tools for undefined viewstyle
return;

if (view_style == main_window->m_current_toolbar_style) // Do nothing
return;
if (view_style != main_window->m_current_toolbar_style) // Update collection of buttons only if viewstyle has changed
{
main_window->m_current_toolbar_style = view_style;

main_window->m_current_toolbar_style = view_style;
// disable/enable coordinate tool
auto is_mapview = view_style == ViewStyle::tvsMapView;
auto is_tableview = view_style == ViewStyle::tvsTableView;
main_window->m_statusbar_coordinates->setVisible(is_mapview || is_tableview);
clearToolbarUpToDetailPagesTools();

// disable/enable coordinate tool
auto is_mapview = view_style == ViewStyle::tvsMapView;
auto is_tableview = view_style == ViewStyle::tvsTableView;
main_window->m_statusbar_coordinates->setVisible(is_mapview || is_tableview);
clearToolbarUpToDetailPagesTools();
if (view_style == ViewStyle::tvsUndefined) // No tools for undefined viewstyle
return;

static std::vector<ToolButtonID> available_table_buttons = getAvailableTableviewButtonIds();
static std::vector<ToolButtonID> available_map_buttons = getAvailableMapviewButtonIds();
static std::vector<ToolButtonID> available_table_buttons = getAvailableTableviewButtonIds();
static std::vector<ToolButtonID> available_map_buttons = getAvailableMapviewButtonIds();

std::vector<ToolButtonID>* buttons_array_ptr = nullptr;
std::vector<ToolButtonID>* buttons_array_ptr = nullptr;

switch (view_style) {
case ViewStyle::tvsTableView: buttons_array_ptr = &available_table_buttons; break;
case ViewStyle::tvsMapView: buttons_array_ptr = &available_map_buttons; break;
switch (view_style) {
case ViewStyle::tvsTableView: buttons_array_ptr = &available_table_buttons; break;
case ViewStyle::tvsMapView: buttons_array_ptr = &available_map_buttons; break;
}
if (buttons_array_ptr == nullptr)
return;

auto first_toolbar_detail_pages_action = main_window->m_dms_toolbar_spacer_action.get();
for (auto button_id : *buttons_array_ptr) {
if (button_id == TB_Undefined) {
QWidget* spacer = new QWidget(main_window);
spacer->setMinimumSize(dms_params::toolbar_button_spacing);
main_window->m_current_dms_view_actions.push_back(main_window->m_toolbar->insertWidget(first_toolbar_detail_pages_action, spacer));
spacer->setFocusPolicy(Qt::FocusPolicy::NoFocus);
continue;
}

auto button_data = getToolbarButtonData(button_id);
auto button_icon = QIcon(button_data.icons[0]);
auto action = new DmsToolbuttonAction(button_id, button_icon, view_style == ViewStyle::tvsTableView ? button_data.text[0] : button_data.text[1], main_window->m_toolbar, button_data, view_style);
main_window->m_current_dms_view_actions.push_back(action);

main_window->m_toolbar->insertAction(first_toolbar_detail_pages_action, action);

// connections
main_window->connect(action, &DmsToolbuttonAction::triggered, action, &DmsToolbuttonAction::onToolbuttonPressed);
}
}
if (buttons_array_ptr == nullptr)

if (!dv)
return;

assert(dv);
auto first_toolbar_detail_pages_action = main_window->m_dms_toolbar_spacer_action.get();
for (auto button_id : *buttons_array_ptr) {
if (button_id == TB_Undefined) {
QWidget* spacer = new QWidget(main_window);
spacer->setMinimumSize(dms_params::toolbar_button_spacing);
main_window->m_current_dms_view_actions.push_back(main_window->m_toolbar->insertWidget(first_toolbar_detail_pages_action, spacer));
spacer->setFocusPolicy(Qt::FocusPolicy::NoFocus);
for (auto action : main_window->m_current_dms_view_actions) {
auto dmsAction = dynamic_cast<DmsToolbuttonAction*>(action);
if (!dmsAction)
continue;
}

auto button_data = getToolbarButtonData(button_id);
auto button_icon = QIcon(button_data.icons[0]);
auto action = new DmsToolbuttonAction(button_id, button_icon, view_style == ViewStyle::tvsTableView ? button_data.text[0] : button_data.text[1], main_window->m_toolbar, button_data, view_style);
main_window->m_current_dms_view_actions.push_back(action);
auto is_command_enabled = dv->OnCommandEnable(button_id) == CommandStatus::ENABLED;
if (!is_command_enabled)
action->setDisabled(true);

main_window->m_toolbar->insertAction(first_toolbar_detail_pages_action, action);

// connections
main_window->connect(action, &DmsToolbuttonAction::triggered, action, &DmsToolbuttonAction::onToolbuttonPressed);
auto commandStatus = dv->OnCommandEnable(dmsAction->getButtonId());
action->setVisible (commandStatus != CommandStatus::HIDDEN );
action->setDisabled(commandStatus == CommandStatus::DISABLED);
action->setChecked (commandStatus == CommandStatus::DOWN );
}
}
4 changes: 3 additions & 1 deletion qtgui/exe/src/DmsToolbar.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@ class DmsToolbuttonAction : public QAction {
public:
DmsToolbuttonAction(const ToolButtonID id, const QIcon& icon, const QString& text, QObject* parent = nullptr, ToolbarButtonData button_data = {}, ViewStyle vs = ViewStyle::tvsUndefined);

auto getButtonId() const { return m_data.id; };

public slots:
void onToolbuttonPressed();

private:
auto getNumberOfStates() const -> UInt8 { return m_data.ids.size(); };
auto getNumberOfStates() const { return m_data.ids.size(); };
void updateState();
void onGlobalButtonPressed(QDmsViewArea* dms_view_area);
void onExportButtonPressed(QDmsViewArea* dms_view_area);
Expand Down
11 changes: 9 additions & 2 deletions shv/dll/src/ViewPort.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1020,14 +1020,21 @@ bool isSelectionTool(ToolButtonID id)

CommandStatus ViewPort::OnCommandEnable(ToolButtonID id) const
{
switch (id) {
case TB_NeedleOn: return IsNeedleVisible() ? CommandStatus::DOWN : CommandStatus::ENABLED;
case TB_ScaleBarOn: return m_ScaleBarCaret ? CommandStatus::DOWN : CommandStatus::ENABLED;
}

if (isSelectionTool(id))
{
const GraphicLayer* al = GetActiveLayer();
if (!al)
if (!al || al->OnCommandEnable(id) == CommandStatus::DISABLED)
return CommandStatus::DISABLED;
return al->OnCommandEnable(id);
}

if (GetDataView().lock()->m_ControllerID == id)
return CommandStatus::DOWN;

return base_type::OnCommandEnable(id);
}

Expand Down

0 comments on commit 26ed9ef

Please sign in to comment.