Skip to content
Merged

Wip #2354

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions src/ant/ant/antService.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1541,6 +1541,19 @@ Service::begin_move (lay::Editable::MoveMode mode, const db::DPoint &p, lay::ang
}
}

static int snap_prio (lay::PointSnapToObjectResult::ObjectSnap os)
{
if (os == lay::PointSnapToObjectResult::ObjectVertex) {
return 3;
} else if (os == lay::PointSnapToObjectResult::ObjectEdge) {
return 2;
} else if (os == lay::PointSnapToObjectResult::ObjectUnspecific) {
return 1;
} else {
return 0;
}
}

void
Service::snap_rulers (lay::angle_constraint_type ac)
{
Expand All @@ -1566,7 +1579,7 @@ Service::snap_rulers (lay::angle_constraint_type ac)
auto snp = snap2_details (org1, p1, ruler, ac);
double dist = p1.distance (snp.snapped_point);

if (min_dist < 0 || dist < min_dist) {
if (min_dist < 0 || snap_prio (snp.object_snap) > snap_prio (min_snp.object_snap) || (snap_prio (snp.object_snap) == snap_prio (min_snp.object_snap) && dist < min_dist)) {
min_snp = snp;
min_dist = dist;
min_delta = snp.snapped_point - p1;
Expand All @@ -1575,7 +1588,7 @@ Service::snap_rulers (lay::angle_constraint_type ac)
snp = snap2_details (org2, p2, ruler, ac);
dist = p2.distance (snp.snapped_point);

if (min_dist < 0 || dist < min_dist) {
if (min_dist < 0 || snap_prio (snp.object_snap) > snap_prio (min_snp.object_snap) || (snap_prio (snp.object_snap) == snap_prio (min_snp.object_snap) && dist < min_dist)) {
min_snp = snp;
min_dist = dist;
min_delta = snp.snapped_point - p2;
Expand Down Expand Up @@ -1631,10 +1644,10 @@ Service::move (const db::DPoint &p, lay::angle_constraint_type ac)

m_trans = db::DTrans (dp + (m_p1 - db::DPoint ()) - m_trans.disp ()) * m_trans * db::DTrans (db::DPoint () - m_p1);

propose_move_transformation (m_trans, 1);

snap_rulers (ac_eff);

propose_move_transformation (m_trans, 1);

for (std::vector<ant::View *>::iterator r = m_rulers.begin (); r != m_rulers.end (); ++r) {
(*r)->transform_by (db::DCplxTrans (m_trans));
}
Expand Down Expand Up @@ -1834,6 +1847,7 @@ Service::edit_cancel ()
m_move_mode = MoveNone;
m_selected.clear ();
selection_to_view ();
clear_mouse_cursors ();

}
}
Expand Down
8 changes: 8 additions & 0 deletions src/img/img/imgObject.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1009,6 +1009,7 @@ Object::operator= (const img::Object &d)

m_trans = d.m_trans;
m_filename = d.m_filename;
m_tag = d.m_tag;

mp_data = d.mp_data;
if (mp_data) {
Expand Down Expand Up @@ -1963,6 +1964,7 @@ void
Object::swap (Object &other)
{
m_filename.swap (other.m_filename);
m_tag.swap (other.m_tag);
std::swap (m_trans, other.m_trans);
std::swap (mp_data, other.mp_data);
std::swap (m_id, other.m_id);
Expand All @@ -1979,6 +1981,12 @@ Object::swap (Object &other)
std::swap (m_updates_enabled, other.m_updates_enabled);
}

void
Object::set_tag (const std::string &tag)
{
m_tag = tag;
}

size_t
Object::width () const
{
Expand Down
17 changes: 17 additions & 0 deletions src/img/img/imgObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -581,6 +581,22 @@ class IMG_PUBLIC Object
return d;
}

/**
* @brief Sets the tag string
*
* The tag string is an arbitrary string that can be used to identify
* the image. It is not persisted and it not considered for equality or sorting.
*/
void set_tag (const std::string &tag);

/**
* @brief Gets the tag string
*/
const std::string tag () const
{
return m_tag;
}

/**
* @brief Accessor to the width property
*/
Expand Down Expand Up @@ -1036,6 +1052,7 @@ class IMG_PUBLIC Object

private:
std::string m_filename;
std::string m_tag;
db::Matrix3d m_trans;
DataHeader *mp_data;
size_t m_id;
Expand Down
55 changes: 29 additions & 26 deletions src/img/img/imgPropertiesPage.cc
Original file line number Diff line number Diff line change
Expand Up @@ -314,46 +314,48 @@ PropertiesPage::min_max_value_changed ()
emit edited ();
}

void
PropertiesPage::color_mapping_changed ()
bool
PropertiesPage::update_controls ()
{
if (! m_no_signals) {

bool has_error = false;
bool has_error = false;

value_le->setText (QString ());
value_le->setEnabled (false);
value_le->setText (QString ());
value_le->setEnabled (false);

colors->setEnabled (false_color_control->has_selection ());
colors->set_single_mode (false);
colors->setEnabled (false_color_control->has_selection ());
colors->set_single_mode (false);

if (false_color_control->has_selection () && false_color_control->selected_node () > 0 && false_color_control->selected_node () < int (false_color_control->nodes ().size ()) - 1) {
if (false_color_control->has_selection () && false_color_control->selected_node () > 0 && false_color_control->selected_node () < int (false_color_control->nodes ().size ()) - 1) {

double xmin, xmax;
get_xmin_xmax (xmin, xmax, has_error);
double xmin, xmax;
get_xmin_xmax (xmin, xmax, has_error);

if (! has_error) {
if (! has_error) {

double x = false_color_control->nodes () [false_color_control->selected_node ()].first;
double xx = x * (xmax - xmin) + xmin;
double x = false_color_control->nodes () [false_color_control->selected_node ()].first;
double xx = x * (xmax - xmin) + xmin;

value_le->setText (tl::to_qstring (tl::sprintf ("%.4g", xx)));
value_le->setEnabled (true);
value_le->setText (tl::to_qstring (tl::sprintf ("%.4g", xx)));
value_le->setEnabled (true);

}
}

} else if (false_color_control->has_selection ()) {
} else if (false_color_control->has_selection ()) {

colors->set_single_mode (true);
colors->set_single_mode (true);

}
}

if (! has_error) {
m_in_color_mapping_signal = true;
emit edited ();
m_in_color_mapping_signal = false;
}
return has_error;
}

void
PropertiesPage::color_mapping_changed ()
{
if (! m_no_signals && ! update_controls ()) {
m_in_color_mapping_signal = true;
emit edited ();
m_in_color_mapping_signal = false;
}
}

Expand Down Expand Up @@ -509,6 +511,7 @@ PropertiesPage::update ()

m_no_signals = false;

update_controls ();
recompute_histogram ();
}

Expand Down
1 change: 1 addition & 0 deletions src/img/img/imgPropertiesPage.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ private slots:
void invalidate ();
void init ();
void get_xmin_xmax (double &xmin, double &xmax, bool &has_error_out);
bool update_controls ();
};

}
Expand Down
10 changes: 10 additions & 0 deletions src/lay/lay/layApplication.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1658,6 +1658,12 @@ GuiApplication::event (QEvent *event)
return QApplication::event(event);
}

static void atexit_handler ()
{
if (lay::ApplicationBase::instance ()) {
lay::ApplicationBase::instance ()->shutdown ();
}
}

int
GuiApplication::exec ()
Expand Down Expand Up @@ -1693,6 +1699,10 @@ GuiApplication::exec ()

}

// register an exit handler to shutdown cleanly in case of an explicit exit
// inside the code
::atexit (&atexit_handler);

return QApplication::exec ();
}

Expand Down
10 changes: 9 additions & 1 deletion src/lay/lay/layApplication.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,15 @@ class LAY_PUBLIC ApplicationBase
*/
void exit (int result);

/**
* @brief Shut down the application
*
* Calling this function will close the main window and
* prepare for exit. Unlike "exit", it dows not actually exit
* the process.
*/
virtual void shutdown ();

/**
* @brief Return the program's version
*/
Expand Down Expand Up @@ -330,7 +339,6 @@ class LAY_PUBLIC ApplicationBase

protected:
virtual void setup () = 0;
virtual void shutdown ();
virtual void prepare_recording (const std::string &gtf_record, bool gtf_record_incremental);
virtual void start_recording ();
virtual lay::Dispatcher *dispatcher () const = 0;
Expand Down
6 changes: 4 additions & 2 deletions src/lay/lay/layClipDialog.cc
Original file line number Diff line number Diff line change
Expand Up @@ -168,12 +168,14 @@ BEGIN_PROTECTED

} else if (rb_shapes->isChecked ()) {

lay::CellView ccv = view ()->cellview (cb_layer->cv_index ());
int sel_layer = cb_layer->current_layer ();
if (sel_layer < 0 || ! cv->layout ().is_valid_layer (sel_layer)) {

if (! ccv.is_valid () || sel_layer < 0 || ! ccv->layout ().is_valid_layer (sel_layer)) {
throw tl::Exception (tl::to_string (QObject::tr ("No valid layer selected to get clip boxes from")));
}

db::collect_clip_boxes (cv->layout (), cv.cell_index (), (unsigned int) sel_layer, clip_boxes);
db::collect_clip_boxes (ccv->layout (), ccv.cell_index (), (unsigned int) sel_layer, clip_boxes);

}

Expand Down
1 change: 0 additions & 1 deletion src/lay/lay/layMainWindow.cc
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,6 @@ show_dock_widget (QDockWidget *dock_widget, bool visible)

MainWindow::MainWindow (QApplication *app, const char *name, bool undo_enabled)
: QMainWindow (0),
tl::Object (),
lay::DispatcherDelegate (),
m_dispatcher (this),
m_text_progress (this, 10 /*verbosity threshold*/),
Expand Down
1 change: 0 additions & 1 deletion src/lay/lay/layMainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@ class ProgressWidget;
*/
class LAY_PUBLIC MainWindow
: public QMainWindow,
public tl::Object,
public gsi::ObjectBase,
public lay::DispatcherDelegate
{
Expand Down
3 changes: 2 additions & 1 deletion src/laybasic/laybasic/layDispatcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ class ConfigureAction;
* @brief A delegate by which the dispatcher can submit notification events
*/
class LAYBASIC_PUBLIC DispatcherDelegate
: public tl::Object
{
public:
/**
Expand Down Expand Up @@ -271,7 +272,7 @@ class LAYBASIC_PUBLIC Dispatcher
#if defined(HAVE_QT)
QWidget *mp_menu_parent_widget;
#endif
DispatcherDelegate *mp_delegate;
tl::weak_ptr<DispatcherDelegate> mp_delegate;
};

}
Expand Down
6 changes: 6 additions & 0 deletions src/laybasic/laybasic/layLayoutViewConfig.cc
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ class LayoutViewBasicConfigDeclaration
options.push_back (std::pair<std::string, std::string> (cfg_layers_always_show_ld, "true"));
options.push_back (std::pair<std::string, std::string> (cfg_layers_always_show_layout_index, "false"));
options.push_back (std::pair<std::string, std::string> (cfg_test_shapes_in_view, "false"));
options.push_back (std::pair<std::string, std::string> (cfg_layer_search_as_expressions, "true"));
options.push_back (std::pair<std::string, std::string> (cfg_layer_search_as_filter, "false"));
options.push_back (std::pair<std::string, std::string> (cfg_layer_search_case_sensitive, "true"));
options.push_back (std::pair<std::string, std::string> (cfg_cell_search_as_expressions, "true"));
options.push_back (std::pair<std::string, std::string> (cfg_cell_search_as_filter, "false"));
options.push_back (std::pair<std::string, std::string> (cfg_cell_search_case_sensitive, "true"));
options.push_back (std::pair<std::string, std::string> (cfg_flat_cell_list, "false"));
options.push_back (std::pair<std::string, std::string> (cfg_split_cell_list, "false"));
options.push_back (std::pair<std::string, std::string> (cfg_cell_list_sorting, "by-name"));
Expand Down
3 changes: 3 additions & 0 deletions src/laybasic/laybasic/layMove.cc
Original file line number Diff line number Diff line change
Expand Up @@ -437,9 +437,12 @@ MoveService::drag_cancel ()
{
m_shift = db::DPoint ();
if (m_dragging) {

show_toolbox (false);
ui ()->ungrab_mouse (this);

m_dragging = false;

}
}

Expand Down
7 changes: 7 additions & 0 deletions src/laybasic/laybasic/laybasicConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,13 @@ static const std::string cfg_layers_always_show_layout_index ("layers-always-sho
static const std::string cfg_reader_options_show_always ("reader-options-show-always");
static const std::string cfg_tip_window_hidden ("tip-window-hidden");

static const std::string cfg_layer_search_as_expressions ("layer-search-as-expressions");
static const std::string cfg_layer_search_as_filter ("layer-search-as-filter");
static const std::string cfg_layer_search_case_sensitive ("layer-search-case-sensitive");
static const std::string cfg_cell_search_as_expressions ("cell-search-as-expressions");
static const std::string cfg_cell_search_as_filter ("cell-search-as-filter");
static const std::string cfg_cell_search_case_sensitive ("cell-search-case-sensitive");

static const std::string cfg_bitmap_oversampling ("bitmap-oversampling");
static const std::string cfg_highres_mode ("highres-mode");
static const std::string cfg_subres_mode ("subres-mode");
Expand Down
36 changes: 35 additions & 1 deletion src/layui/layui/layHierarchyControlPanel.cc
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ HierarchyControlPanel::HierarchyControlPanel (lay::LayoutViewBase *view, QWidget
mp_search_edit_box->set_escape_signal_enabled (true);
mp_search_edit_box->set_tab_signal_enabled (true);
connect (mp_search_edit_box, SIGNAL (returnPressed ()), this, SLOT (search_editing_finished ()));
connect (mp_search_edit_box, SIGNAL (textEdited (const QString &)), this, SLOT (search_edited ()));
connect (mp_search_edit_box, SIGNAL (textEdited (const QString &)), this, SLOT (search_edited_no_signal ()));
connect (mp_search_edit_box, SIGNAL (esc_pressed ()), this, SLOT (search_editing_finished ()));
connect (mp_search_edit_box, SIGNAL (tab_pressed ()), this, SLOT (search_next ()));
connect (mp_search_edit_box, SIGNAL (backtab_pressed ()), this, SLOT (search_prev ()));
Expand Down Expand Up @@ -452,8 +452,42 @@ HierarchyControlPanel::search_triggered (const QString &t)
}
}

void
HierarchyControlPanel::set_search_as_filter (bool f)
{
if (f != search_as_filter ()) {
mp_filter->setChecked (f);
search_edited_no_signal ();
}
}

void
HierarchyControlPanel::set_search_case_sensitive (bool f)
{
if (f != search_case_sensitive ()) {
mp_case_sensitive->setChecked (f);
search_edited_no_signal ();
}
}

void
HierarchyControlPanel::set_search_as_expression (bool f)
{
if (f != search_as_expression ()) {
mp_use_regular_expressions->setChecked (f);
search_edited_no_signal ();
}
}

void
HierarchyControlPanel::search_edited ()
{
search_edited_no_signal ();
emit search_options_changed ();
}

void
HierarchyControlPanel::search_edited_no_signal ()
{
bool filter_invalid = false;

Expand Down
Loading
Loading