mirror of https://github.com/KLayout/klayout.git
WIP: polishing geometry of modal editor options widget
This commit is contained in:
parent
a24e2431a2
commit
0447080d17
|
|
@ -116,14 +116,12 @@ EditorOptionsPages::has_modal_content () const
|
|||
bool
|
||||
EditorOptionsPages::exec_modal (EditorOptionsPage *page)
|
||||
{
|
||||
QTabWidget *modal_pages = mp_modal_pages->pages_widget ();
|
||||
for (int i = 0; i < mp_modal_pages->count (); ++i) {
|
||||
|
||||
for (int i = 0; i < modal_pages->count (); ++i) {
|
||||
|
||||
if (modal_pages->widget (i) == page) {
|
||||
if (mp_modal_pages->widget (i) == page) {
|
||||
|
||||
// found the page - make it current and show the dialog
|
||||
modal_pages->setCurrentIndex (i);
|
||||
mp_modal_pages->set_current_index (i);
|
||||
page->set_focus ();
|
||||
return mp_modal_pages->exec () != 0;
|
||||
|
||||
|
|
@ -193,8 +191,6 @@ EditorOptionsPages::update (lay::EditorOptionsPage *page)
|
|||
std::vector <lay::EditorOptionsPage *> sorted_pages = m_pages;
|
||||
std::sort (sorted_pages.begin (), sorted_pages.end (), EOPCompareOp ());
|
||||
|
||||
QTabWidget *modal_pages = mp_modal_pages->pages_widget ();
|
||||
|
||||
if (! page && m_pages.size () > 0) {
|
||||
page = m_pages.back ();
|
||||
}
|
||||
|
|
@ -203,8 +199,8 @@ EditorOptionsPages::update (lay::EditorOptionsPage *page)
|
|||
mp_pages->removeTab (0);
|
||||
}
|
||||
|
||||
while (modal_pages->count () > 0) {
|
||||
modal_pages->removeTab (0);
|
||||
while (mp_modal_pages->count () > 0) {
|
||||
mp_modal_pages->remove_page (0);
|
||||
}
|
||||
|
||||
int index = -1;
|
||||
|
|
@ -219,22 +215,15 @@ EditorOptionsPages::update (lay::EditorOptionsPage *page)
|
|||
mp_pages->addTab (*p, tl::to_qstring ((*p)->title ()));
|
||||
} else {
|
||||
if ((*p) == page) {
|
||||
modal_index = modal_pages->count ();
|
||||
modal_index = mp_modal_pages->count ();
|
||||
}
|
||||
modal_pages->addTab (*p, tl::to_qstring ((*p)->title ()));
|
||||
mp_modal_pages->add_page (*p);
|
||||
}
|
||||
} else {
|
||||
(*p)->setParent (0);
|
||||
}
|
||||
}
|
||||
|
||||
lay::EditorOptionsPage *single_modal_page = modal_pages->count () == 1 ? dynamic_cast<lay::EditorOptionsPage *> (modal_pages->widget (0)) : 0;
|
||||
if (single_modal_page) {
|
||||
mp_modal_pages->setWindowTitle (tl::to_qstring (single_modal_page->title ()));
|
||||
} else {
|
||||
mp_modal_pages->setWindowTitle (tr ("Editor Options"));
|
||||
}
|
||||
|
||||
if (index < 0) {
|
||||
index = mp_pages->currentIndex ();
|
||||
}
|
||||
|
|
@ -244,12 +233,12 @@ EditorOptionsPages::update (lay::EditorOptionsPage *page)
|
|||
mp_pages->setCurrentIndex (index);
|
||||
|
||||
if (modal_index < 0) {
|
||||
modal_index = modal_pages->currentIndex ();
|
||||
modal_index = mp_modal_pages->current_index ();
|
||||
}
|
||||
if (modal_index >= int (modal_pages->count ())) {
|
||||
modal_index = modal_pages->count () - 1;
|
||||
if (modal_index >= int (mp_modal_pages->count ())) {
|
||||
modal_index = mp_modal_pages->count () - 1;
|
||||
}
|
||||
modal_pages->setCurrentIndex (modal_index);
|
||||
mp_modal_pages->set_current_index (modal_index);
|
||||
|
||||
setVisible (mp_pages->count () > 0);
|
||||
}
|
||||
|
|
@ -295,22 +284,38 @@ END_PROTECTED_W (this)
|
|||
// EditorOptionsModalPages implementation
|
||||
|
||||
EditorOptionsModalPages::EditorOptionsModalPages (EditorOptionsPages *parent)
|
||||
: QDialog (parent), mp_parent (parent)
|
||||
: QDialog (parent), mp_parent (parent), mp_single_page (0)
|
||||
{
|
||||
QVBoxLayout *ly = new QVBoxLayout (this);
|
||||
ly->setContentsMargins (0, 0, 0, 0);
|
||||
|
||||
QVBoxLayout *ly4 = new QVBoxLayout (this);
|
||||
ly4->setContentsMargins (6, 6, 6, 0);
|
||||
ly->addLayout (ly4);
|
||||
mp_pages = new QTabWidget (this);
|
||||
ly->addWidget (mp_pages, 1);
|
||||
ly4->addWidget (mp_pages, 1);
|
||||
mp_pages->setTabBarAutoHide (true);
|
||||
mp_pages->hide ();
|
||||
|
||||
mp_single_page_frame = new QFrame (this);
|
||||
QVBoxLayout *ly2 = new QVBoxLayout (mp_single_page_frame);
|
||||
ly2->setContentsMargins (0, 0, 0, 0);
|
||||
ly->addWidget (mp_single_page_frame, 1);
|
||||
mp_single_page_frame->hide ();
|
||||
|
||||
QVBoxLayout *ly3 = new QVBoxLayout (this);
|
||||
ly->addLayout (ly3);
|
||||
ly3->setContentsMargins (6, 6, 6, 6);
|
||||
mp_button_box = new QDialogButtonBox (this);
|
||||
ly->addWidget (mp_button_box);
|
||||
ly3->addWidget (mp_button_box);
|
||||
mp_button_box->setOrientation (Qt::Horizontal);
|
||||
mp_button_box->setStandardButtons (QDialogButtonBox::Cancel | QDialogButtonBox::Apply | QDialogButtonBox::Ok);
|
||||
|
||||
connect (mp_button_box, SIGNAL (clicked(QAbstractButton *)), this, SLOT (clicked(QAbstractButton *)));
|
||||
connect (mp_button_box, SIGNAL (accepted()), this, SLOT (accept()));
|
||||
connect (mp_button_box, SIGNAL (rejected()), this, SLOT (reject()));
|
||||
|
||||
update_title ();
|
||||
}
|
||||
|
||||
EditorOptionsModalPages::~EditorOptionsModalPages ()
|
||||
|
|
@ -318,6 +323,97 @@ EditorOptionsModalPages::~EditorOptionsModalPages ()
|
|||
// .. nothing yet ..
|
||||
}
|
||||
|
||||
int
|
||||
EditorOptionsModalPages::count ()
|
||||
{
|
||||
return mp_single_page ? 1 : mp_pages->count ();
|
||||
}
|
||||
|
||||
int
|
||||
EditorOptionsModalPages::current_index ()
|
||||
{
|
||||
return mp_single_page ? 0 : mp_pages->currentIndex ();
|
||||
}
|
||||
|
||||
void
|
||||
EditorOptionsModalPages::set_current_index (int index)
|
||||
{
|
||||
if (! mp_single_page) {
|
||||
mp_pages->setCurrentIndex (index);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
EditorOptionsModalPages::add_page (EditorOptionsPage *page)
|
||||
{
|
||||
if (! mp_single_page) {
|
||||
if (mp_pages->count () == 0) {
|
||||
mp_single_page = page;
|
||||
mp_single_page->setParent (mp_single_page_frame);
|
||||
mp_single_page_frame->layout ()->addWidget (mp_single_page);
|
||||
mp_single_page_frame->show ();
|
||||
mp_pages->hide ();
|
||||
} else {
|
||||
mp_pages->addTab (page, tl::to_qstring (page->title ()));
|
||||
}
|
||||
} else {
|
||||
mp_pages->clear ();
|
||||
mp_single_page_frame->layout ()->removeWidget (mp_single_page);
|
||||
mp_single_page_frame->hide ();
|
||||
mp_pages->addTab (mp_single_page, tl::to_qstring (mp_single_page->title ()));
|
||||
mp_single_page = 0;
|
||||
mp_pages->addTab (page, tl::to_qstring (page->title ()));
|
||||
mp_pages->show ();
|
||||
}
|
||||
|
||||
update_title ();
|
||||
}
|
||||
|
||||
void
|
||||
EditorOptionsModalPages::remove_page (int index)
|
||||
{
|
||||
if (mp_single_page) {
|
||||
if (index == 0) {
|
||||
mp_single_page->setParent (0);
|
||||
mp_single_page = 0;
|
||||
mp_single_page_frame->hide ();
|
||||
mp_single_page_frame->layout ()->removeWidget (mp_single_page);
|
||||
}
|
||||
} else {
|
||||
mp_pages->removeTab (index);
|
||||
if (mp_pages->count () == 1) {
|
||||
mp_pages->hide ();
|
||||
mp_single_page = dynamic_cast<EditorOptionsPage *> (mp_pages->widget (0));
|
||||
mp_pages->removeTab (0);
|
||||
mp_single_page->setParent (mp_single_page_frame);
|
||||
mp_single_page_frame->layout ()->addWidget (mp_single_page);
|
||||
mp_single_page_frame->show ();
|
||||
}
|
||||
}
|
||||
|
||||
update_title ();
|
||||
}
|
||||
|
||||
void
|
||||
EditorOptionsModalPages::update_title ()
|
||||
{
|
||||
if (mp_single_page) {
|
||||
setWindowTitle (tl::to_qstring (mp_single_page->title ()));
|
||||
} else {
|
||||
setWindowTitle (tr ("Editor Options"));
|
||||
}
|
||||
}
|
||||
|
||||
EditorOptionsPage *
|
||||
EditorOptionsModalPages::widget (int index)
|
||||
{
|
||||
if (mp_single_page) {
|
||||
return index == 0 ? mp_single_page : 0;
|
||||
} else {
|
||||
return dynamic_cast<EditorOptionsPage *> (mp_pages->widget (index));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
EditorOptionsModalPages::accept ()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -100,10 +100,12 @@ public:
|
|||
EditorOptionsModalPages (EditorOptionsPages *parent);
|
||||
~EditorOptionsModalPages ();
|
||||
|
||||
QTabWidget *pages_widget ()
|
||||
{
|
||||
return mp_pages;
|
||||
}
|
||||
int count ();
|
||||
int current_index ();
|
||||
void set_current_index (int index);
|
||||
void add_page (EditorOptionsPage *page);
|
||||
void remove_page (int index);
|
||||
EditorOptionsPage *widget (int index);
|
||||
|
||||
private slots:
|
||||
void accept ();
|
||||
|
|
@ -113,7 +115,11 @@ private slots:
|
|||
private:
|
||||
EditorOptionsPages *mp_parent;
|
||||
QTabWidget *mp_pages;
|
||||
QFrame *mp_single_page_frame;
|
||||
EditorOptionsPage *mp_single_page;
|
||||
QDialogButtonBox *mp_button_box;
|
||||
|
||||
void update_title ();
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue