Skip to content

Commit 732a18e

Browse files
author
Luca Toniolo
committed
Merge branch 'master' into yy-accepted
2 parents 0027f3c + 0eed7c0 commit 732a18e

11 files changed

Lines changed: 1316 additions & 1634 deletions

File tree

docs/po/es.po

Lines changed: 1227 additions & 1530 deletions
Large diffs are not rendered by default.

docs/po/pt.po

Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ msgstr ""
1010
"Project-Id-Version: PACKAGE VERSION\n"
1111
"Report-Msgid-Bugs-To: emc-developers@lists.sourceforge.net\n"
1212
"POT-Creation-Date: 2026-01-18 16:22+0000\n"
13-
"PO-Revision-Date: 2026-01-21 14:48+0000\n"
13+
"PO-Revision-Date: 2026-01-26 02:11+0000\n"
1414
"Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n"
1515
"Language-Team: none\n"
1616
"Language: pt\n"
@@ -1289,10 +1289,8 @@ msgstr ""
12891289

12901290
#. type: Content of: <html><body><div><ul><li>
12911291
#: src/index.tmpl:323
1292-
#, fuzzy
1293-
#| msgid "<a href=\"gui/gladevcp-libraries.html\">GladeVCP Libraries</a>"
12941292
msgid "<a href=\"gui/gladevcp-panels.html\">GladeVCP Panels</a>"
1295-
msgstr "<a href=\"gui/gladevcp-libraries.html\">Bibliotecas de GladeVCP</a>"
1293+
msgstr "<a href=\"gui/gladevcp-libraries.html\">Painéis de GladeVCP</a>"
12961294

12971295
#. type: Content of: <html><body><div><ul><li>
12981296
#: src/index.tmpl:324
@@ -7453,53 +7451,42 @@ msgstr ""
74537451
#: src/code/code-notes.adoc:1003
74547452
#, no-wrap
74557453
msgid "timeout > 0"
7456-
msgstr ""
7454+
msgstr "timeout > 0"
74577455

74587456
#. type: Plain text
74597457
#: src/code/code-notes.adoc:1005
7460-
#, fuzzy
7461-
#| msgid ""
7462-
#| "timeout > 0 Blocking access until the timeout interval is reached or "
7463-
#| "access to the buffer is available."
74647458
msgid ""
74657459
"Blocking access until the timeout interval is reached or access to the "
74667460
"buffer is available."
74677461
msgstr ""
7468-
"timeout > 0 Bloquear o acesso até que o intervalo de tempo limite seja "
7469-
"alcançado ou o acesso ao buffer esteja disponível."
7462+
"Bloquear o acesso até que o intervalo de tempo limite seja alcançado ou o "
7463+
"acesso ao buffer esteja disponível."
74707464

74717465
#. type: Labeled list
74727466
#: src/code/code-notes.adoc:1006
74737467
#, no-wrap
74747468
msgid "timeout = 0"
7475-
msgstr ""
7469+
msgstr "timeout = 0"
74767470

74777471
#. type: Plain text
74787472
#: src/code/code-notes.adoc:1008
7479-
#, fuzzy
7480-
#| msgid ""
7481-
#| "timeout = 0 Access to the buffer is only possible if no other process is "
7482-
#| "reading or writing at the time."
74837473
msgid ""
74847474
"Access to the buffer is only possible if no other process is reading or "
74857475
"writing at the time."
74867476
msgstr ""
7487-
"timeout = 0 O acesso ao buffer só é possível se nenhum outro processo "
7488-
"estiver a ler ou escrever nesse momento."
7477+
"O acesso ao buffer só é possível se nenhum outro processo estiver a ler ou "
7478+
"escrever nesse momento."
74897479

74907480
#. type: Labeled list
74917481
#: src/code/code-notes.adoc:1009
74927482
#, no-wrap
74937483
msgid "timeout < 0 or INF"
7494-
msgstr ""
7484+
msgstr "timeout < 0 ou INF"
74957485

74967486
#. type: Plain text
74977487
#: src/code/code-notes.adoc:1010
7498-
#, fuzzy
7499-
#| msgid "timeout < 0 or INF Access is blocked until the buffer is available."
75007488
msgid "Access is blocked until the buffer is available."
7501-
msgstr ""
7502-
"timeout < 0 ou INF O acesso é bloqueado até que o buffer esteja disponível."
7489+
msgstr "O acesso é bloqueado até que o buffer esteja disponível."
75037490

75047491
#. type: Title ==
75057492
#: src/code/code-notes.adoc:1011
@@ -7722,11 +7709,10 @@ msgstr ""
77227709

77237710
#. type: NOTE
77247711
#: src/code/code-notes.adoc:1099
7725-
#, fuzzy
7726-
#| msgid "add the type define: #define EMC_IO_GENERIC_TYPE ((NMLTYPE) 1605) +"
77277712
msgid "add the type define: #define EMC_IO_GENERIC_TYPE \\((NMLTYPE) 1605) +"
77287713
msgstr ""
7729-
"adiciona o tipo de definição: #define EMC_IO_GENERIC_TYPE ((NMLTYPE) 1605) +"
7714+
"adiciona o tipo de definição: #define EMC_IO_GENERIC_TYPE \\((NMLTYPE) 1605) "
7715+
"+"
77307716

77317717
#. type: NOTE
77327718
#: src/code/code-notes.adoc:1100
@@ -8249,7 +8235,7 @@ msgstr ""
82498235
#. type: NOTE
82508236
#: src/code/code-notes.adoc:1223
82518237
msgid "Handled by +Interp::convert_tool_length_offset()+."
8252-
msgstr ""
8238+
msgstr "Lidado por +Interp::convert_tool_length_offset()+."
82538239

82548240
#. type: NOTE
82558241
#: src/code/code-notes.adoc:1228
@@ -8710,7 +8696,7 @@ msgstr ""
87108696
#: src/code/code-notes.adoc:1368
87118697
#, no-wrap
87128698
msgid "In the status buffer"
8713-
msgstr ""
8699+
msgstr "No buffer de estado"
87148700

87158701
#. type: NOTE
87168702
#: src/code/code-notes.adoc:1371
@@ -8769,7 +8755,7 @@ msgstr ""
87698755
#: src/code/code-notes.adoc:1387
87708756
#, no-wrap
87718757
msgid "`status.motion.axis[EMCMOT_MAX_AXIS]`"
8772-
msgstr ""
8758+
msgstr "`status.motion.axis[EMCMOT_MAX_AXIS]`"
87738759

87748760
#. type: NOTE
87758761
#: src/code/code-notes.adoc:1390
@@ -8783,7 +8769,7 @@ msgstr ""
87838769
#: src/code/code-notes.adoc:1391
87848770
#, no-wrap
87858771
msgid "`status.motion.joint[EMCMOT_MAX_JOINTS]`"
8786-
msgstr ""
8772+
msgstr "`status.motion.joint[EMCMOT_MAX_JOINTS]`"
87878773

87888774
#. type: NOTE
87898775
#: src/code/code-notes.adoc:1394
@@ -8896,7 +8882,7 @@ msgstr ""
88968882
#: src/code/contributing-to-linuxcnc.adoc:34
88978883
#, no-wrap
88988884
msgid "The Git Revision Control System"
8899-
msgstr ""
8885+
msgstr "O Sistema de Controle de Revisão Git"
89008886

89018887
#. type: Plain text
89028888
#: src/code/contributing-to-linuxcnc.adoc:38
@@ -8916,6 +8902,8 @@ msgstr "Repositório Git oficial do LinuxCNC"
89168902
msgid ""
89178903
"The official LinuxCNC git repo is at https://github.com/linuxcnc/linuxcnc/"
89188904
msgstr ""
8905+
"O repositório git oficial do LinuxCNC está em https://github.com/linuxcnc/"
8906+
"linuxcnc/"
89198907

89208908
#. type: Plain text
89218909
#: src/code/contributing-to-linuxcnc.adoc:44
@@ -8964,7 +8952,7 @@ msgstr "https://github.com/LinuxCNC/linuxcnc/pulls"
89648952
#: src/code/contributing-to-linuxcnc.adoc:62
89658953
#, no-wrap
89668954
msgid "Use of Git in the LinuxCNC project"
8967-
msgstr ""
8955+
msgstr "Uso do Git no projeto LinuxCNC"
89688956

89698957
#. type: Plain text
89708958
#: src/code/contributing-to-linuxcnc.adoc:66
@@ -9008,7 +8996,7 @@ msgstr ""
90088996
#: src/code/contributing-to-linuxcnc.adoc:83
90098997
#, no-wrap
90108998
msgid "git tutorials"
9011-
msgstr ""
8999+
msgstr "tutoriais do git"
90129000

90139001
#. type: Plain text
90149002
#: src/code/contributing-to-linuxcnc.adoc:86
@@ -9030,20 +9018,26 @@ msgid ""
90309018
"git tutorial: https://www.kernel.org/pub/software/scm/git/docs/"
90319019
"gittutorial.html"
90329020
msgstr ""
9021+
"tutorial git: https://www.kernel.org/pub/software/scm/git/docs/"
9022+
"gittutorial.html"
90339023

90349024
#. type: Plain text
90359025
#: src/code/contributing-to-linuxcnc.adoc:96
90369026
msgid ""
90379027
"git tutorial 2: https://www.kernel.org/pub/software/scm/git/docs/"
90389028
"gittutorial-2.html"
90399029
msgstr ""
9030+
"tutorial git 2: https://www.kernel.org/pub/software/scm/git/docs/gittutorial-"
9031+
"2.html"
90409032

90419033
#. type: Plain text
90429034
#: src/code/contributing-to-linuxcnc.adoc:98
90439035
msgid ""
90449036
"Everyday git with 20 commands or so: https://www.kernel.org/pub/software/scm/"
90459037
"git/docs/giteveryday.html"
90469038
msgstr ""
9039+
"Git de todos os dias com 20 comandos ou mais: https://www.kernel.org/pub/"
9040+
"software/scm/git/docs/giteveryday.html"
90479041

90489042
#. type: Plain text
90499043
#: src/code/contributing-to-linuxcnc.adoc:100
@@ -9070,7 +9064,7 @@ msgstr ""
90709064
#: src/code/contributing-to-linuxcnc.adoc:107
90719065
#, no-wrap
90729066
msgid "Overview of the process"
9073-
msgstr ""
9067+
msgstr "Visão geral do processo"
90749068

90759069
#. type: Plain text
90769070
#: src/code/contributing-to-linuxcnc.adoc:111
@@ -9094,7 +9088,7 @@ msgstr "Clonar o repositório git."
90949088
#. type: Plain text
90959089
#: src/code/contributing-to-linuxcnc.adoc:115
90969090
msgid "Make your changes in a local branch."
9097-
msgstr ""
9091+
msgstr "Faça as suas alterações num ramo local."
90989092

90999093
#. type: Plain text
91009094
#: src/code/contributing-to-linuxcnc.adoc:116
@@ -9286,7 +9280,7 @@ msgstr ""
92869280
#: src/code/contributing-to-linuxcnc.adoc:181
92879281
#, no-wrap
92889282
msgid "Get rid of RTAPI_SUCCESS, use 0 instead"
9289-
msgstr ""
9283+
msgstr "Livre-se de RTAPI_SUCCESS, use 0 em vez disto"
92909284

92919285
#. type: Plain text
92929286
#: src/code/contributing-to-linuxcnc.adoc:186

lib/python/qtvcp/widgets/detach_tabs.py

Lines changed: 29 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,21 @@ def __init__(self, parent=None):
1212

1313
self.setTabBar(self.tabBar)
1414

15+
self.btn = QPushButton(self)
16+
self.btn.setEnabled(True)
17+
#self.btn.setMinimumSize(64, 40)
18+
#self.btn.setIconSize(QSize(38, 38))
19+
self.btn.setIcon(QIcon(':/qt-project.org/styles/commonstyle/images/up-32.png'))
20+
self.btn.clicked.connect(self.invokeDetachTab)
21+
self.setCornerWidget(self.btn)
22+
23+
self._lastgeometry = None
24+
25+
@pyqtSlot(bool)
26+
def invokeDetachTab(self, **args):
27+
x = self.btn.geometry().x()
28+
y = self.btn.geometry().y()
29+
self.detachTab(self.currentIndex(), QPoint(x,y))
1530

1631
##
1732
# The default movable functionality of QTabWidget must remain disabled
@@ -58,62 +73,14 @@ def detachTab(self, index, point):
5873
detachedTab.setWindowTitle(name + ' - Close to reattach')
5974
detachedTab.setWindowIcon(icon)
6075
detachedTab.setObjectName(name)
61-
detachedTab.setGeometry(contentWidgetRect)
62-
detachedTab.onCloseSignal.connect(self.attachTab)
63-
detachedTab.move(point)
64-
detachedTab.show()
65-
66-
def attachTab1(self, contentWidget, name, icon):
67-
68-
# Make the content widget a child of this widget
69-
contentWidget.setParent(self)
70-
71-
72-
# Create an image from the given icon
73-
if not icon.isNull():
74-
tabIconPixmap = icon.pixmap(icon.availableSizes()[0])
75-
tabIconImage = tabIconPixmap.toImage()
76-
else:
77-
tabIconImage = None
78-
79-
80-
# Create an image of the main window icon
81-
if not icon.isNull():
82-
windowIconPixmap = self.window().windowIcon().pixmap(icon.availableSizes()[0])
83-
windowIconImage = windowIconPixmap.toImage()
84-
else:
85-
windowIconImage = None
86-
87-
88-
# Determine if the given image and the main window icon are the same.
89-
# If they are, then do not add the icon to the tab
90-
if name == 'Model Selection':
91-
index = 0
92-
elif name == "Model' Parameters":
93-
index = 1
94-
elif name == 'Stim settings':
95-
index = 2
96-
elif name == 'Parameter evolution settings':
97-
index = 3
98-
elif name == 'LambdaE':
99-
index = 4
100-
elif name == 'Simulation settings':
101-
index = 5
102-
elif name == 'LFP + PPS + Pulse Results':
103-
index = 6
104-
if tabIconImage == windowIconImage:
105-
index = self.insertTab(index,contentWidget, name)
106-
# index = self.addTab(contentWidget, name)
76+
if self._lastgeometry is None:
77+
detachedTab.setGeometry(contentWidgetRect)
78+
detachedTab.move(point)
10779
else:
108-
# index = self.addTab(contentWidget, icon, name)
109-
index = self.insertTab(index,contentWidget, icon, name)
110-
111-
112-
113-
# Make this tab the current tab
114-
if index > -1:
115-
self.setCurrentIndex(index)
80+
detachedTab.setGeometry(self._lastgeometry)
11681

82+
detachedTab.onCloseSignal.connect(self.attachTab)
83+
detachedTab.show()
11784

11885
##
11986
# Re-attach the tab by removing the content from the DetachedTab dialog,
@@ -122,8 +89,10 @@ def attachTab1(self, contentWidget, name, icon):
12289
# @param contentWidget the content widget from the DetachedTab dialog
12390
# @param name the name of the detached tab
12491
# @param icon the window icon for the detached tab
125-
@pyqtSlot(QWidget, type(''), QIcon)
126-
def attachTab(self, contentWidget, name, icon):
92+
@pyqtSlot(QWidget, type(''), QIcon, QRect)
93+
def attachTab(self, contentWidget, name, icon, geometry):
94+
95+
self._lastgeometry = geometry
12796

12897
# Make the content widget a child of this widget
12998
contentWidget.setParent(self)
@@ -163,7 +132,7 @@ def attachTab(self, contentWidget, name, icon):
163132
# can be re-attached by closing the dialog or by double clicking on its
164133
# window frame.
165134
class DetachedTab(QDialog):
166-
onCloseSignal = pyqtSignal(QWidget,type(''), QIcon)
135+
onCloseSignal = pyqtSignal(QWidget,type(''), QIcon, QRect)
167136

168137
def __init__(self, contentWidget, parent=None):
169138
QDialog.__init__(self, parent)
@@ -198,7 +167,7 @@ def event(self, event):
198167
#
199168
# @param event a close event
200169
def closeEvent(self, event):
201-
self.onCloseSignal.emit(self.contentWidget, self.objectName(), self.windowIcon())
170+
self.onCloseSignal.emit(self.contentWidget, self.objectName(), self.windowIcon(),self.geometry())
202171

203172

204173
##
@@ -326,8 +295,8 @@ def __init__(self, parent=None):
326295
self.parent = parent
327296
self.centralTabs= DetachTabWidget()
328297
self.setCentralWidget(self.centralTabs)
329-
self.setFixedWidth(200)
330-
self.setFixedHeight(200)
298+
# self.setFixedWidth(200)
299+
#self.setFixedHeight(200)
331300

332301
#tab 1
333302
self.tab_1 = QWidget()

share/qtvcp/screens/qtdragon/qtdragon.ui

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7862,7 +7862,7 @@ LOG</string>
78627862
<number>0</number>
78637863
</property>
78647864
<item>
7865-
<widget class="QTabWidget" name="tabWidget_utilities">
7865+
<widget class="DetachTabWidget" name="tabWidget_utilities">
78667866
<property name="currentIndex">
78677867
<number>0</number>
78687868
</property>
@@ -18274,6 +18274,11 @@ SCROLL</string>
1827418274
<extends>QWidget</extends>
1827518275
<header>qtvcp.widgets.virtualkeyboard</header>
1827618276
</customwidget>
18277+
<customwidget>
18278+
<class>DetachTabWidget</class>
18279+
<extends>QTabWidget</extends>
18280+
<header>qtvcp.widgets.detach_tabs</header>
18281+
</customwidget>
1827718282
<customwidget>
1827818283
<class>QWebView</class>
1827918284
<extends>QWidget</extends>

share/qtvcp/screens/qtdragon/qtdragon_handler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1205,7 +1205,7 @@ def chk_use_virtual_changed(self, state):
12051205
# show ngcgui info tab (in the stackedWidget) if ngcgui utilites
12061206
# tab is selected
12071207
def tab_utilities_changed(self, num):
1208-
if num == 2:
1208+
if 'ngc' in self.w.tabWidget_utilities.tabText(num).lower():
12091209
self.w.stackedWidget.setCurrentIndex(PAGE_NGCGUI)
12101210
else:
12111211
self.w.stackedWidget.setCurrentIndex(PAGE_GCODE)

0 commit comments

Comments
 (0)