mirror of https://github.com/KLayout/klayout.git
188 lines
5.6 KiB
C++
188 lines
5.6 KiB
C++
|
|
/*
|
|
|
|
KLayout Layout Viewer
|
|
Copyright (C) 2006-2017 Matthias Koefferlein
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
*/
|
|
|
|
|
|
#include "antPropertiesPage.h"
|
|
#include "layLayoutView.h"
|
|
#include "layQtTools.h"
|
|
|
|
namespace ant
|
|
{
|
|
|
|
// -------------------------------------------------------------------------
|
|
// PropertiesPage implementation
|
|
|
|
PropertiesPage::PropertiesPage (ant::Service *rulers, QWidget *parent)
|
|
: lay::PropertiesPage (parent, rulers), mp_rulers (rulers), m_enable_cb_callback (true)
|
|
{
|
|
mp_rulers->get_selection (m_selection);
|
|
m_pos = m_selection.begin ();
|
|
|
|
setupUi (this);
|
|
|
|
lay::activate_help_links (help_label);
|
|
|
|
mp_rulers->clear_highlights ();
|
|
}
|
|
|
|
PropertiesPage::~PropertiesPage ()
|
|
{
|
|
mp_rulers->restore_highlights ();
|
|
}
|
|
|
|
void
|
|
PropertiesPage::back ()
|
|
{
|
|
m_pos = m_selection.end ();
|
|
}
|
|
|
|
void
|
|
PropertiesPage::front ()
|
|
{
|
|
m_pos = m_selection.begin ();
|
|
}
|
|
|
|
const ant::Object &
|
|
PropertiesPage::current () const
|
|
{
|
|
const ant::Object *ruler = dynamic_cast <const ant::Object *> ((*m_pos)->ptr ());
|
|
return *ruler;
|
|
}
|
|
|
|
bool
|
|
PropertiesPage::at_begin () const
|
|
{
|
|
return (m_pos == m_selection.begin ());
|
|
}
|
|
|
|
bool
|
|
PropertiesPage::at_end () const
|
|
{
|
|
return (m_pos == m_selection.end ());
|
|
}
|
|
|
|
void
|
|
PropertiesPage::operator-- ()
|
|
{
|
|
--m_pos;
|
|
}
|
|
|
|
void
|
|
PropertiesPage::operator++ ()
|
|
{
|
|
++m_pos;
|
|
}
|
|
|
|
void
|
|
PropertiesPage::leave ()
|
|
{
|
|
mp_rulers->clear_highlights ();
|
|
}
|
|
|
|
void
|
|
PropertiesPage::update ()
|
|
{
|
|
mp_rulers->highlight (std::distance (m_selection.begin (), m_pos));
|
|
|
|
fmt_le->setText (tl::to_qstring (current ().fmt ()));
|
|
fmt_x_le->setText (tl::to_qstring (current ().fmt_x ()));
|
|
fmt_y_le->setText (tl::to_qstring (current ().fmt_y ()));
|
|
style_cb->setCurrentIndex (current ().style ());
|
|
outline_cb->setCurrentIndex (current ().outline ());
|
|
|
|
x1->setText (tl::to_qstring (tl::micron_to_string (current ().p1 ().x ())));
|
|
x1->setCursorPosition (0);
|
|
x2->setText (tl::to_qstring (tl::micron_to_string (current ().p2 ().x ())));
|
|
x2->setCursorPosition (0);
|
|
y1->setText (tl::to_qstring (tl::micron_to_string (current ().p1 ().y ())));
|
|
y1->setCursorPosition (0);
|
|
y2->setText (tl::to_qstring (tl::micron_to_string (current ().p2 ().y ())));
|
|
y2->setCursorPosition (0);
|
|
|
|
main_position->setCurrentIndex (current ().main_position ());
|
|
main_xalign->setCurrentIndex (current ().main_xalign ());
|
|
main_yalign->setCurrentIndex (current ().main_yalign ());
|
|
xlabel_xalign->setCurrentIndex (current ().xlabel_xalign ());
|
|
xlabel_yalign->setCurrentIndex (current ().xlabel_yalign ());
|
|
ylabel_xalign->setCurrentIndex (current ().ylabel_xalign ());
|
|
ylabel_yalign->setCurrentIndex (current ().ylabel_yalign ());
|
|
|
|
double sx = (current ().p2 ().x () - current ().p1 ().x ());
|
|
double sy = (current ().p2 ().y () - current ().p1 ().y ());
|
|
dx->setText (tl::to_qstring (tl::micron_to_string (sx)));
|
|
dx->setCursorPosition (0);
|
|
dy->setText (tl::to_qstring (tl::micron_to_string (sy)));
|
|
dy->setCursorPosition (0);
|
|
dd->setText (tl::to_qstring (tl::micron_to_string (sqrt (sx * sx + sy * sy))));
|
|
dd->setCursorPosition (0);
|
|
}
|
|
|
|
bool
|
|
PropertiesPage::readonly ()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
void
|
|
PropertiesPage::apply ()
|
|
{
|
|
double dx1 = current ().p1 ().x (), dy1 = current ().p1 ().y ();
|
|
double dx2 = current ().p2 ().x (), dy2 = current ().p2 ().y ();
|
|
|
|
// only adjust the values if the text has changed
|
|
if (tl::to_qstring (tl::micron_to_string (dx1)) != x1->text ()) {
|
|
tl::from_string (tl::to_string (x1->text ()), dx1);
|
|
}
|
|
if (tl::to_qstring (tl::micron_to_string (dx2)) != x2->text ()) {
|
|
tl::from_string (tl::to_string (x2->text ()), dx2);
|
|
}
|
|
if (tl::to_qstring (tl::micron_to_string (dy1)) != y1->text ()) {
|
|
tl::from_string (tl::to_string (y1->text ()), dy1);
|
|
}
|
|
if (tl::to_qstring (tl::micron_to_string (dy2)) != y2->text ()) {
|
|
tl::from_string (tl::to_string (y2->text ()), dy2);
|
|
}
|
|
|
|
std::string fmt = tl::to_string (fmt_le->text ());
|
|
std::string fmt_x = tl::to_string (fmt_x_le->text ());
|
|
std::string fmt_y = tl::to_string (fmt_y_le->text ());
|
|
Object::style_type style = Object::style_type (style_cb->currentIndex ());
|
|
Object::outline_type outline = Object::outline_type (outline_cb->currentIndex ());
|
|
|
|
ant::Object ruler (db::DPoint (dx1, dy1), db::DPoint (dx2, dy2), current ().id (), fmt_x, fmt_y, fmt, style, outline, current ().snap (), current ().angle_constraint ());
|
|
|
|
ruler.set_main_position (Object::position_type (main_position->currentIndex ()));
|
|
ruler.set_main_xalign (Object::alignment_type (main_xalign->currentIndex ()));
|
|
ruler.set_main_yalign (Object::alignment_type (main_yalign->currentIndex ()));
|
|
ruler.set_xlabel_xalign (Object::alignment_type (xlabel_xalign->currentIndex ()));
|
|
ruler.set_xlabel_yalign (Object::alignment_type (xlabel_yalign->currentIndex ()));
|
|
ruler.set_ylabel_xalign (Object::alignment_type (ylabel_xalign->currentIndex ()));
|
|
ruler.set_ylabel_yalign (Object::alignment_type (ylabel_yalign->currentIndex ()));
|
|
|
|
ruler.set_category (current ().category ());
|
|
|
|
mp_rulers->change_ruler (*m_pos, ruler);
|
|
}
|
|
|
|
}
|
|
|