diff --git a/src/ant/ant/RulerOptions.ui b/src/ant/ant/RulerOptions.ui
new file mode 100644
index 000000000..151f8f658
--- /dev/null
+++ b/src/ant/ant/RulerOptions.ui
@@ -0,0 +1,242 @@
+
+
+ RulerOptions
+
+
+
+ 0
+ 0
+ 400
+ 446
+
+
+
+
+ 0
+ 0
+
+
+
+ Form
+
+
+
+ 6
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Plain
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 400
+ 446
+
+
+
+
+ 2
+
+
+ 4
+
+
+ 4
+
+
+ 4
+
+
+ 4
+
+
-
+
+
+ Snapping
+
+
+
+ 4
+
+
+ 4
+
+
+ 4
+
+
+ 4
+
+
+ 6
+
+
+ 2
+
+
-
+
+
+ Snap to grid
+
+
+
+ -
+
+
+ Snap to edge/vertex
+
+
+
+
+
+
+ -
+
+
+ Angle Constraints
+
+
+
+ 4
+
+
+ 4
+
+
+ 4
+
+
+ 4
+
+
+ 6
+
+
+ 2
+
+
-
+
+
+
+ 1
+ 0
+
+
+
+ QComboBox::AdjustToContents
+
+
-
+
+ Any Angle
+
+
+ -
+
+ Diagonal
+
+
+ -
+
+ Diagonal only
+
+
+ -
+
+ Orthogonal
+
+
+ -
+
+ Horizontal only
+
+
+ -
+
+ Vertical only
+
+
+
+
+ -
+
+
+ Ruler direction
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
+ -
+
+
+ Note: certain rulers may ignore these options
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 121
+ 70
+
+
+
+
+
+
+
+
+
+
+
+ scrollArea
+ snap_to_grid_cbx
+ snap_to_objects_cbx
+ angle_cb
+
+
+
+
diff --git a/src/ant/ant/ant.pro b/src/ant/ant/ant.pro
index 1d1286c73..dbd46c374 100644
--- a/src/ant/ant/ant.pro
+++ b/src/ant/ant/ant.pro
@@ -14,6 +14,7 @@ FORMS = \
RulerConfigPage3.ui \
RulerConfigPage4.ui \
RulerPropertiesPage.ui \
+ RulerOptions.ui \
}
@@ -22,10 +23,12 @@ FORMS = \
HEADERS = \
antConfigPage.h \
antPropertiesPage.h \
+ antRulerOptionsPage.h
SOURCES = \
antConfigPage.cc \
antPropertiesPage.cc \
+ antRulerOptionsPage.cc
# Enabled without Qt:
diff --git a/src/ant/ant/antRulerOptionsPage.cc b/src/ant/ant/antRulerOptionsPage.cc
new file mode 100644
index 000000000..4fa248315
--- /dev/null
+++ b/src/ant/ant/antRulerOptionsPage.cc
@@ -0,0 +1,114 @@
+
+/*
+
+ KLayout Layout Viewer
+ Copyright (C) 2006-2026 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 "antRulerOptionsPage.h"
+#include "antConfig.h"
+#include "laySnap.h"
+#include "layConverters.h"
+#include "layDispatcher.h"
+#include "tlString.h"
+#include "tlClassRegistry.h"
+
+#include "ui_RulerOptions.h"
+
+namespace ant
+{
+
+// ------------------------------------------------------------------
+// RulerOptionsPage implementation
+
+RulerOptionsPage::RulerOptionsPage (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher)
+ : lay::EditorOptionsPageWidget (view, dispatcher)
+{
+ mp_ui = new Ui::RulerOptions ();
+ mp_ui->setupUi (this);
+
+ connect (mp_ui->angle_cb, SIGNAL (activated (int)), this, SLOT (edited ()));
+ connect (mp_ui->snap_to_grid_cbx, SIGNAL (clicked ()), this, SLOT (edited ()));
+ connect (mp_ui->snap_to_objects_cbx, SIGNAL (clicked ()), this, SLOT (edited ()));
+}
+
+RulerOptionsPage::~RulerOptionsPage ()
+{
+ delete mp_ui;
+ mp_ui = 0;
+}
+
+std::string
+RulerOptionsPage::title () const
+{
+ return tl::to_string (QObject::tr ("Ruler Options"));
+}
+
+// Must match order in angle_cb
+static std::vector s_ac_options =
+{
+ lay::AC_Any,
+ lay::AC_Diagonal,
+ lay::AC_DiagonalOnly,
+ lay::AC_Ortho,
+ lay::AC_Horizontal,
+ lay::AC_Vertical
+};
+
+void
+RulerOptionsPage::apply (lay::Dispatcher *root)
+{
+ lay::angle_constraint_type ac = lay::AC_Any;
+ int ai = mp_ui->angle_cb->currentIndex ();
+ if (ai >= 0 && ai < int (s_ac_options.size ())) {
+ ac = s_ac_options [ai];
+ }
+
+ lay::ACConverter acc;
+ root->config_set (cfg_ruler_snap_mode, acc.to_string (ac));
+
+ root->config_set (cfg_ruler_obj_snap, tl::to_string (mp_ui->snap_to_objects_cbx->isChecked ()));
+ root->config_set (cfg_ruler_grid_snap, tl::to_string (mp_ui->snap_to_grid_cbx->isChecked ()));
+}
+
+void
+RulerOptionsPage::setup (lay::Dispatcher *root)
+{
+ lay::ACConverter acc;
+ lay::angle_constraint_type ac;
+
+ ac = lay::AC_Any;
+ root->config_get (cfg_ruler_snap_mode, ac, acc);
+ for (int ai = 0; ai < int (s_ac_options.size ()); ++ai) {
+ if (s_ac_options [ai] == ac) {
+ mp_ui->angle_cb->setCurrentIndex (ai);
+ }
+ }
+
+ bool snap_to_grid = false;
+ root->config_get (cfg_ruler_grid_snap, snap_to_grid);
+ mp_ui->snap_to_grid_cbx->setChecked (snap_to_grid);
+
+ bool snap_to_objects = false;
+ root->config_get (cfg_ruler_obj_snap, snap_to_objects);
+ mp_ui->snap_to_objects_cbx->setChecked (snap_to_objects);
+}
+
+static tl::RegisteredClass s_factory_ruler_options (new lay::EditorOptionsPageFactory ("ant::RulerOptions"), 0);
+
+}
diff --git a/src/ant/ant/antRulerOptionsPage.h b/src/ant/ant/antRulerOptionsPage.h
new file mode 100644
index 000000000..cd934adbc
--- /dev/null
+++ b/src/ant/ant/antRulerOptionsPage.h
@@ -0,0 +1,62 @@
+
+/*
+
+ KLayout Layout Viewer
+ Copyright (C) 2006-2026 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
+
+*/
+
+
+#ifndef HDR_antRulerOptionsPage
+#define HDR_antRulerOptionsPage
+
+#include "antCommon.h"
+
+#include "layEditorOptionsPageWidget.h"
+
+namespace Ui
+{
+ class RulerOptions;
+}
+
+namespace ant
+{
+
+/**
+ * @brief The generic properties page
+ */
+class RulerOptionsPage
+ : public lay::EditorOptionsPageWidget
+{
+Q_OBJECT
+
+public:
+ RulerOptionsPage (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher);
+ ~RulerOptionsPage ();
+
+ virtual std::string title () const;
+ virtual int order () const { return -10; }
+ void apply (lay::Dispatcher *root);
+ void setup (lay::Dispatcher *root);
+
+private:
+ Ui::RulerOptions *mp_ui;
+};
+
+}
+
+#endif