Skip to content

Commit

Permalink
tool edit pad: make dialog non modal
Browse files Browse the repository at this point in the history
closes #474
  • Loading branch information
carrotIndustries committed Dec 29, 2020
1 parent b14e5f4 commit e2bf3b2
Show file tree
Hide file tree
Showing 13 changed files with 316 additions and 159 deletions.
2 changes: 1 addition & 1 deletion Makefile
Expand Up @@ -307,7 +307,7 @@ SRC_IMP = \
src/dialogs/edit_shape.cpp\
src/dialogs/manage_net_classes.cpp\
src/dialogs/manage_power_nets.cpp\
src/dialogs/edit_pad_parameter_set.cpp\
src/dialogs/pad_parameter_set_window.cpp\
src/dialogs/edit_via.cpp\
src/dialogs/pool_browser_dialog.cpp\
src/dialogs/schematic_properties.cpp\
Expand Down
59 changes: 49 additions & 10 deletions src/core/tools/tool_edit_pad_parameter_set.cpp
Expand Up @@ -2,6 +2,7 @@
#include "document/idocument_package.hpp"
#include "pool/package.hpp"
#include "imp/imp_interface.hpp"
#include "dialogs/pad_parameter_set_window.hpp"
#include <iostream>

namespace horizon {
Expand All @@ -13,28 +14,66 @@ bool ToolEditPadParameterSet::can_begin()

std::set<Pad *> ToolEditPadParameterSet::get_pads()
{
std::set<Pad *> pads;
std::set<Pad *> my_pads;
for (const auto &it : selection) {
if (it.type == ObjectType::PAD) {
pads.emplace(&doc.k->get_package().pads.at(it.uuid));
my_pads.emplace(&doc.k->get_package().pads.at(it.uuid));
}
}
return pads;
return my_pads;
}

ToolResponse ToolEditPadParameterSet::begin(const ToolArgs &args)
{
auto pads = get_pads();
auto r = imp->dialogs.edit_pad_parameter_set(pads, doc.r->get_pool(), doc.k->get_package());
if (r) {
return ToolResponse::commit();
}
else {
return ToolResponse::revert();
pads = get_pads();
selection.clear();
auto &hl = imp->get_highlights();
hl.clear();
for (const auto &it : pads) {
hl.emplace(ObjectType::PAD, it->uuid);
}
imp->update_highlights();

imp->tool_bar_set_actions({
{InToolActionID::LMB, "pick pad"},
});

win = imp->dialogs.show_pad_parameter_set_window(pads, doc.r->get_pool(), doc.k->get_package());
return ToolResponse();
}

ToolResponse ToolEditPadParameterSet::update(const ToolArgs &args)
{
if (args.type == ToolEventType::DATA) {
if (auto data = dynamic_cast<const ToolDataWindow *>(args.data.get())) {
if (data->event == ToolDataWindow::Event::CLOSE) {
select_pads();
return ToolResponse::revert();
}
else if (data->event == ToolDataWindow::Event::OK) {
select_pads();
return ToolResponse::commit();
}
}
}
else if (args.type == ToolEventType::ACTION && args.action == InToolActionID::LMB) {
if (args.target.type == ObjectType::PAD) {
if (!win->go_to_pad(args.target.path.at(0))) {
imp->tool_bar_flash("pad not selected");
}
}
else {
imp->tool_bar_flash("please click on a pad");
}
}
return ToolResponse();
}

void ToolEditPadParameterSet::select_pads()
{
for (auto &it : pads) {
selection.emplace(it->uuid, ObjectType::PAD);
}
}

} // namespace horizon
10 changes: 10 additions & 0 deletions src/core/tools/tool_edit_pad_parameter_set.hpp
Expand Up @@ -13,8 +13,18 @@ class ToolEditPadParameterSet : public ToolBase {
{
return true;
}
std::set<InToolActionID> get_actions() const override
{
using I = InToolActionID;
return {
I::LMB,
};
}

private:
std::set<class Pad *> pads;
void select_pads();
class PadParameterSetWindow *win = nullptr;
std::set<class Pad *> get_pads();
};
} // namespace horizon
25 changes: 16 additions & 9 deletions src/core/tools/tool_place_pad.cpp
Expand Up @@ -2,7 +2,7 @@
#include "document/idocument_package.hpp"
#include "pool/package.hpp"
#include "imp/imp_interface.hpp"
#include <iostream>
#include "dialogs/tool_window.hpp"
#include "pool/pool.hpp"

namespace horizon {
Expand Down Expand Up @@ -54,10 +54,10 @@ void ToolPlacePad::create_pad(const Coordi &pos)
ToolResponse ToolPlacePad::update(const ToolArgs &args)
{

if (args.type == ToolEventType::MOVE) {
if (args.type == ToolEventType::MOVE && !imp->dialogs.get_nonmodal()) {
temp->placement.shift = args.coords;
}
else if (args.type == ToolEventType::ACTION) {
else if (args.type == ToolEventType::ACTION && !imp->dialogs.get_nonmodal()) {
switch (args.action) {
case InToolActionID::LMB: {
auto old_pad = temp;
Expand All @@ -80,17 +80,24 @@ ToolResponse ToolPlacePad::update(const ToolArgs &args)

case InToolActionID::EDIT: {
std::set<Pad *> pads{temp};
auto params = temp->parameter_set;
if (imp->dialogs.edit_pad_parameter_set(pads, doc.r->get_pool(), doc.k->get_package())
== false) { // rollback
temp->parameter_set = params;
}
doc.k->get_package().apply_parameter_set({});
temp_param = temp->parameter_set;
imp->dialogs.show_pad_parameter_set_window(pads, doc.r->get_pool(), doc.k->get_package());
} break;

default:;
}
}
else if (args.type == ToolEventType::DATA) {
if (auto data = dynamic_cast<const ToolDataWindow *>(args.data.get())) {
if (data->event == ToolDataWindow::Event::CLOSE) {
temp->parameter_set = temp_param;
doc.k->get_package().apply_parameter_set({});
}
if (data->event == ToolDataWindow::Event::OK) {
imp->dialogs.close_nonmodal();
}
}
}
return ToolResponse();
}
} // namespace horizon
2 changes: 2 additions & 0 deletions src/core/tools/tool_place_pad.hpp
@@ -1,5 +1,6 @@
#pragma once
#include "core/tool.hpp"
#include "parameter/set.hpp"

namespace horizon {
class ToolPlacePad : public ToolBase {
Expand All @@ -19,6 +20,7 @@ class ToolPlacePad : public ToolBase {
private:
const class Padstack *padstack = nullptr;
class Pad *temp = nullptr;
ParameterSet temp_param;
void create_pad(const Coordi &c);
};
} // namespace horizon
22 changes: 15 additions & 7 deletions src/dialogs/dialogs.cpp
Expand Up @@ -19,7 +19,7 @@
#include "annotate.hpp"
#include "pool/part.hpp"
#include "edit_shape.hpp"
#include "edit_pad_parameter_set.hpp"
#include "pad_parameter_set_window.hpp"
#include "schematic_properties.hpp"
#include "edit_via.hpp"
#include "edit_plane.hpp"
Expand Down Expand Up @@ -253,12 +253,6 @@ bool Dialogs::annotate(Schematic &s)
return dia.run() == Gtk::RESPONSE_OK;
}

bool Dialogs::edit_pad_parameter_set(std::set<class Pad *> &pads, IPool &pool, class Package &pkg)
{
PadParameterSetDialog dia(parent, pads, pool, pkg);
return dia.run() == Gtk::RESPONSE_OK;
}

bool Dialogs::edit_board_hole(std::set<class BoardHole *> &holes, IPool &pool, Block &block)
{
BoardHoleDialog dia(parent, holes, pool, block);
Expand Down Expand Up @@ -575,6 +569,20 @@ RouterSettingsWindow *Dialogs::show_router_settings_window(ToolSettings &setting
return win;
}

PadParameterSetWindow *Dialogs::show_pad_parameter_set_window(std::set<class Pad *> &pads, class IPool &pool,
class Package &pkg)
{
if (auto win = dynamic_cast<PadParameterSetWindow *>(window_nonmodal)) {
win->present();
return win;
}
auto win = new PadParameterSetWindow(parent, interface, pads, pool, pkg);
window_nonmodal = win;
win->signal_hide().connect([this] { close_nonmodal(); });
win->present();
return win;
}

void Dialogs::close_nonmodal()
{
delete window_nonmodal;
Expand Down
3 changes: 2 additions & 1 deletion src/dialogs/dialogs.hpp
Expand Up @@ -43,7 +43,6 @@ class Dialogs {
bool manage_power_nets(class Block &b);
bool manage_via_templates(class Board &b, class ViaPadstackProvider &vpp);
bool manage_included_boards(class Board &b);
bool edit_pad_parameter_set(std::set<class Pad *> &pads, class IPool &pool, class Package &pkg);
bool edit_board_hole(std::set<class BoardHole *> &holes, class IPool &pool, class Block &block);
bool annotate(class Schematic &s);
bool edit_plane(class Plane &plane, class Board &brd);
Expand Down Expand Up @@ -71,6 +70,8 @@ class Dialogs {
class RouterSettingsWindow *show_router_settings_window(class ToolSettings &settings);
class EnterDatumAngleWindow *show_enter_datum_angle_window(const std::string &label, uint16_t def = 0);
class EnterDatumScaleWindow *show_enter_datum_scale_window(const std::string &label, double def = 1);
class PadParameterSetWindow *show_pad_parameter_set_window(std::set<class Pad *> &pads, class IPool &pool,
class Package &pkg);

void close_nonmodal();
class ToolWindow *get_nonmodal();
Expand Down
108 changes: 0 additions & 108 deletions src/dialogs/edit_pad_parameter_set.cpp

This file was deleted.

16 changes: 0 additions & 16 deletions src/dialogs/edit_pad_parameter_set.hpp

This file was deleted.

0 comments on commit e2bf3b2

Please sign in to comment.