View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0012515 | Scribus | User Interface | public | 2014-07-13 14:16 | 2026-08-21 00:37 |
| Reporter | Kunda | Assigned To | |||
| Priority | low | Severity | tweak | Reproducibility | have not tried |
| Status | new | Resolution | open | ||
| Platform | Mac | OS | OSX | OS Version | 10.8.5 |
| Product Version | 1.5.0svn | ||||
| Target Version | 1.7 milestone | ||||
| Summary | 0012515: Suggestion to improve indication that Scribus is in Master Pages edit mode | ||||
| Description | When I first started using Scribus, I had no idea what master pages were or how to use them. I didn't really know how to distinguish between normal edit mode and master page mode, save for a few indications: 1) Arrange page window would make it self prominent 2) 'End Edit' button shows up bottom left 3) I would exit the edit mode without making a change and scribus would exit back to the page it was on and I would see nothing, obviously. My idea would be to make a more noticeable state change when editing in 'Master Page'. Something that would look unintrusive any yet give a more visual confirmation that we are indeed in a Master Page right now. Idea: * Colored vertical bar emphasizing Master Page mode (see attached) * A semi-transparent diagonal repeating watermark across the background of the canvas saying 'Master Page Mode' | ||||
| Tags | discussion, masterpage | ||||
| Attached Files | |||||
| Patch | |||||
| related to | 0012108 | closed | fschmid | Wrong caption for Edit Master Pages dialog |
| related to | 0013323 | new | button labels to exit masterpage edit mode | |
| related to | 0012478 | closed | Notifying that Scribus is in Master Page mode if attempting to close Scribus | |
| related to | 0013223 | new | make master pages editing stick out | |
| child of | 0003837 | acknowledged | Metabug: Master pages/Page templates |
|
|
I understand your experience and share your feelings. Colour is somewhat touchy to use with new monochrome black iconset Changing the workspace could be done with changing the texture of the background Instead of a uniform gray it could be some more textured background. For example, free workspace could become some sort of millimeter paper (if you digital native know that awkward thing). |
|
|
Millimeter paper is used during the design of a work. Its connected to designing, layouting the structure, the measures, It fits the masterpages. I uploaded some millimeter paper. |
|
|
Interesting. |
|
|
Maybe... (MasterPageMode.jpg) |
|
|
peter's proposal looks nice (except for the bold :-) something like this could generally be used for messages to be sent to the user. and they could be stacked. some of them close automatically. other must be manually closed / discarded / never show such messages again. or similar. |
|
|
I think Peter's proposal also looks good. +1 |
|
|
now that i look back at it... the only thing i'm a bit worried about is the lost of (precious) vertical pixels... and we might replace the [end edit] button by a simpler [x]. it's not 100% obvious, but i guess that people will get that it does not just wipe away the message (a tooltip could make them happier...) |
|
|
I checked how Adobe do it in Indesign. You have only 2 options to enter or leave the edit mode. 1. double click on master page icon in pages panel to enter // double click on normal pages to leave 2. in down left corner you can switch between pages via combo box, bottom entries are all master page templates. Personally I would prefer to keep it in Scribus as it is or move the exit button to top left corner, because this area represent most important features. In RTL mode it should be in upper right corner. BTW: Illustrator is using a breadcrumb to navigate in object groups and to leave the "edit mode". See Illustrator_group_breadcrumb.png |
|
|
This is what I could achieve. I avoid building stuff on the left and top sides because of rulers. On the right, it does not eat vertical screen estate which (I agree with @ale) is very precious. mp-masterpage-edit-indicator-v2.14.patch (16,340 bytes)
Index: scribus/scribusview.h
===================================================================
--- scribus/scribusview.h (revision 27773)
+++ scribus/scribusview.h (working copy)
@@ -49,6 +49,7 @@
#include <QWheelEvent>
class QEvent;
+class QLabel;
class QMenu;
class QMimeData;
@@ -128,6 +129,10 @@
Vruler *vertRuler { nullptr };
ClockWidget *clockLabel { nullptr };
QPushButton *endEditButton { nullptr };
+ QLabel *masterModeStrip { nullptr };
+ QLabel *masterModeTab { nullptr };
+ QLabel *masterSideTab { nullptr };
+ QLabel *masterNameStrip { nullptr };
/** Dokument zu dem die Seite gehoert */
ScribusDoc * const m_doc { nullptr };
Canvas * const m_canvas { nullptr };
@@ -166,6 +171,21 @@
void reformPagesView();
void showMasterPage(int nr);
void hideMasterPage();
+ /**
+ * @brief Position the master page mode indicators against the current
+ * viewport rectangle. Safe to call before they have been created.
+ */
+ void updateMasterModeIndicators();
+ /**
+ * @brief Refresh the master page name label and window caption from the
+ * page currently being edited. No-op outside master page mode.
+ */
+ void refreshMasterModeLabels();
+ /**
+ * @brief The "Editing Master Page: <name>" text, shared by the window
+ * caption and the status bar. Empty outside master page mode.
+ */
+ QString masterModeLabelText() const;
void showSymbolPage(const QString& symbolName);
void hideSymbolPage();
void showInlinePage(int id);
Index: scribus/scribusview.cpp
===================================================================
--- scribus/scribusview.cpp (revision 27773)
+++ scribus/scribusview.cpp (working copy)
@@ -191,6 +191,56 @@
endEditButton->setGeometry(m_vhRulerHW + 1, height() - m_vhRulerHW - endEditButton->minimumSizeHint().height() - 1, endEditButton->minimumSizeHint().width(), endEditButton->minimumSizeHint().height());
endEditButton->setVisible(false);
+ // "Scribus 02" from the shipped Scribus_Splash swatch. The two blue
+ // indicators are styled by stylesheet so one rule carries both the
+ // colour and the tab's rounded corners.
+ const QString masterModeColor("rgb(28, 67, 199)");
+ const QString masterModeColorLight("rgb(74, 105, 210)");
+ const QString stripStyle = QString("background-color: %1;").arg(masterModeColor);
+ const QString tabStyle = QString("background-color: %1; color: white;"
+ " border-top-left-radius: 4px;"
+ " border-bottom-left-radius: 4px;").arg(masterModeColor);
+ // Same blue, lightened: the side is secondary to the mode itself.
+ const QString sideTabStyle = QString("background-color: %1; color: white;"
+ " border-top-left-radius: 4px;"
+ " border-bottom-left-radius: 4px;").arg(masterModeColorLight);
+
+ masterModeStrip = new QLabel(this);
+ masterModeStrip->setStyleSheet(stripStyle);
+ masterModeStrip->setAttribute(Qt::WA_TransparentForMouseEvents);
+ masterModeStrip->setVisible(false);
+
+ masterModeTab = new QLabel(this);
+ masterModeTab->setStyleSheet(tabStyle);
+ masterModeTab->setAlignment(Qt::AlignCenter);
+ masterModeTab->setAttribute(Qt::WA_TransparentForMouseEvents);
+ masterModeTab->setVisible(false);
+
+ masterSideTab = new QLabel(this);
+ masterSideTab->setStyleSheet(sideTabStyle);
+ masterSideTab->setAlignment(Qt::AlignCenter);
+ masterSideTab->setAttribute(Qt::WA_TransparentForMouseEvents);
+ masterSideTab->setVisible(false);
+
+ masterNameStrip = new QLabel(this);
+ masterNameStrip->setAlignment(Qt::AlignCenter);
+ // Border and background come from the palette rather than a QFrame, so the
+ // label's box can be sized to match the button exactly while still
+ // following the current theme's colours.
+ QPalette namePalette = masterNameStrip->palette();
+ masterNameStrip->setStyleSheet(QString("background-color: %1; color: %2;"
+ " border: 1px solid %3; border-radius: 3px;")
+ .arg(namePalette.color(QPalette::Button).name(),
+ namePalette.color(QPalette::ButtonText).name(),
+ namePalette.color(QPalette::Mid).name()));
+ masterNameStrip->setContentsMargins(8, 0, 8, 0);
+ masterNameStrip->setVisible(false);
+
+ masterModeStrip->setAccessibleName( tr("Master page editing mode") );
+ masterModeTab->setAccessibleName( tr("Master page editing mode") );
+ masterSideTab->setAccessibleName( tr("Master page side") );
+ masterNameStrip->setAccessibleName( tr("Master page being edited") );
+
languageChange();
connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
@@ -243,9 +293,21 @@
endEditButton->setIcon(iconManager.loadIcon("exit"));
}
+// One letter per line: the tab is a narrow vertical strip, so the word
+// reads top to bottom rather than being rotated.
+static QString stackLetters(const QString& word)
+{
+ QStringList letters;
+ letters.reserve(word.length());
+ for (const QChar& letter : word)
+ letters.append(QString(letter));
+ return letters.join('\n');
+}
+
void ScribusView::languageChange()
{
endEditButton->setToolTip( tr("Click here to leave this special edit mode"));
+ updateMasterModeIndicators();
}
void ScribusView::toggleCMS(bool cmsOn)
@@ -1853,6 +1915,7 @@
clockLabel->setFixedSize(15, 15);
}
endEditButton->setGeometry(m_vhRulerHW + 1, height() - m_vhRulerHW - endEditButton->minimumSizeHint().height() - 1, endEditButton->minimumSizeHint().width(), endEditButton->minimumSizeHint().height());
+ updateMasterModeIndicators();
m_canvas->setForcedRedraw(true);
m_canvas->resetRenderMode();
// Per Qt doc, no painting should be done in a resizeEvent,
@@ -2009,6 +2072,10 @@
if (firstPage != -1)
newStatusBarText = (tr("Page %1 to %2").arg(firstPage).arg(lastPage));
}
+ // While editing a master page the page list holds master pages, so the
+ // page range above would count those; show the mode instead.
+ if (m_doc->masterPageMode() && m_doc->m_Selection->count() == 0)
+ newStatusBarText = masterModeLabelText();
m_ScMW->setStatusBarInfoText(newStatusBarText);
}
@@ -2347,9 +2414,105 @@
setCanvasPos(m_doc->currentPage()->xOffset() - 10, m_doc->currentPage()->yOffset() - 10);
updateOn = true;
endEditButton->setVisible(true);
+
+ refreshMasterModeLabels();
+ masterModeStrip->setVisible(true);
+ masterModeTab->setVisible(true);
+ masterNameStrip->setVisible(true);
+ masterModeStrip->raise();
+ masterModeTab->raise();
+ masterSideTab->raise();
+ masterNameStrip->raise();
+ updateMasterModeIndicators();
+
DrawNew();
}
+QString ScribusView::masterModeLabelText() const
+{
+ if (!m_doc || !m_doc->masterPageMode())
+ return QString();
+ return tr("Editing Master Page: %1").arg(m_doc->currentPage()->pageName());
+}
+
+void ScribusView::refreshMasterModeLabels()
+{
+ if (!m_doc || !masterNameStrip || !m_doc->masterPageMode())
+ return;
+
+ QString masterName = m_doc->currentPage()->pageName();
+ QFontMetrics nameMetrics(masterNameStrip->font());
+ int elideWidth = nameMetrics.averageCharWidth() * 28;
+ masterNameStrip->setText(nameMetrics.elidedText(masterName, Qt::ElideRight, elideWidth));
+ masterNameStrip->setToolTip(masterName);
+
+ // The side only means something where pages have sides at all. These are
+ // deliberately our own short words: Scribus's page-location strings read
+ // "Left Page"/"Right Page", which are far too tall stacked one letter
+ // per line.
+ QString sideName;
+ if (m_doc->pagePositioning() != singlePage)
+ {
+ int leftPg = m_doc->currentPage()->LeftPg;
+ if (leftPg == 1)
+ sideName = tr("LEFT", "Vertical tab label for a left hand master page");
+ else if (leftPg == 0)
+ sideName = tr("RIGHT", "Vertical tab label for a right hand master page");
+ else
+ sideName = tr("MIDDLE", "Vertical tab label for a middle master page");
+ }
+ masterSideTab->setText(sideName.isEmpty() ? QString() : stackLetters(sideName));
+ masterSideTab->setToolTip(sideName);
+
+ m_ScMW->setWindowCaptionOverride(masterModeLabelText());
+ updateMasterModeIndicators();
+}
+
+void ScribusView::updateMasterModeIndicators()
+{
+ if (!masterModeStrip || !masterModeTab || !masterNameStrip)
+ return;
+
+ // viewport() is the visible canvas area in this widget's own coordinates,
+ // already excluding the ruler margins and any shown scroll bars.
+ QRect visibleRect = viewport()->geometry();
+
+ const int stripWidth = 7;
+ const int tabWidth = 25;
+ masterModeStrip->setGeometry(visibleRect.right() - stripWidth + 1, visibleRect.top(), stripWidth, visibleRect.height());
+
+ // Prefer the fuller wording, but fall back to the short one when the
+ // translated text would be taller than the visible canvas.
+ QFontMetrics tabMetrics(masterModeTab->font());
+ QString tabText = stackLetters(tr("MASTER PAGE", "Vertical tab label shown while editing a master page"));
+ int tabHeight = tabMetrics.lineSpacing() * (tabText.count('\n') + 1) + 8;
+ if (tabHeight > visibleRect.height())
+ {
+ tabText = stackLetters(tr("MASTER", "Short vertical tab label shown while editing a master page"));
+ tabHeight = tabMetrics.lineSpacing() * (tabText.count('\n') + 1) + 8;
+ }
+ if (masterModeTab->text() != tabText)
+ masterModeTab->setText(tabText);
+ // The tab starts a quarter of the way down the strip.
+ int tabTop = visibleRect.top() + visibleRect.height() / 4;
+ masterModeTab->setGeometry(visibleRect.right() - tabWidth + 1, tabTop, tabWidth, tabHeight);
+
+ // Side tab follows directly below, and is dropped if there is no room.
+ int sideTop = tabTop + tabHeight + 4;
+ int sideHeight = tabMetrics.lineSpacing() * (masterSideTab->text().count('\n') + 1) + 8;
+ bool sideFits = !masterSideTab->text().isEmpty() && (sideTop + sideHeight <= visibleRect.bottom());
+ masterSideTab->setVisible(sideFits && masterModeTab->isVisible());
+ if (sideFits)
+ masterSideTab->setGeometry(visibleRect.right() - tabWidth + 1, sideTop, tabWidth, sideHeight);
+
+ // The name strip takes the button's own rendered height, so the platform
+ // style keeps deciding how tall the button is and the label follows it.
+ int rowHeight = endEditButton->height();
+ int nameWidth = qMax(masterNameStrip->minimumSizeHint().width(), 60);
+ masterNameStrip->setGeometry(endEditButton->x() + endEditButton->width() + 4, endEditButton->y(),
+ nameWidth, rowHeight);
+}
+
void ScribusView::hideMasterPage()
{
deselectItems(true);
@@ -2358,6 +2521,11 @@
m_doc->setMasterPageMode(false);
m_ScMW->pageSelector->setEnabled(true);
endEditButton->setVisible(false);
+ masterModeStrip->setVisible(false);
+ masterModeTab->setVisible(false);
+ masterSideTab->setVisible(false);
+ masterNameStrip->setVisible(false);
+ m_ScMW->setStatusBarInfoText("");
resizeContents(qRound((m_doc->maxCanvasCoordinate.x() - m_doc->minCanvasCoordinate.x()) * m_canvas->scale()), qRound((m_doc->maxCanvasCoordinate.y() - m_doc->minCanvasCoordinate.y()) * m_canvas->scale()));
}
Index: scribus/canvas.cpp
===================================================================
--- scribus/canvas.cpp (revision 27773)
+++ scribus/canvas.cpp (working copy)
@@ -964,7 +964,16 @@
img.setDevicePixelRatio(devicePixelRatioF());
auto painter = std::make_unique<ScPainter>(&img, img.width(), img.height(), 1.0, 0);
- painter->clear(PrefsManager::instance().appPrefs.displayPrefs.scratchColor);
+ QColor scratchColor = PrefsManager::instance().appPrefs.displayPrefs.scratchColor;
+ if (m_doc->masterPageMode())
+ {
+ // Tint the pasteboard while a master page is being edited.
+ QColor masterTint(70, 95, 140);
+ scratchColor = QColor((scratchColor.red() + masterTint.red()) / 2,
+ (scratchColor.green() + masterTint.green()) / 2,
+ (scratchColor.blue() + masterTint.blue()) / 2);
+ }
+ painter->clear(scratchColor);
painter->newPath();
painter->moveTo(0, 0);
painter->lineTo(clipw, 0);
Index: scribus/scribus.h
===================================================================
--- scribus/scribus.h (revision 27773)
+++ scribus/scribus.h (working copy)
@@ -333,6 +333,12 @@
void newActWin(QMdiSubWindow *w);
void closeActiveWindowMasterPageEditor();
void updateActiveWindowCaption(const QString &newCaption);
+ /**
+ * \brief Pin the window caption while a special edit mode is active.
+ * Pass an empty string to release it. Other callers keep updating the
+ * caption normally; the pinned text wins until released.
+ */
+ void setWindowCaptionOverride(const QString& caption);
void windowsMenuActivated(int id);
void PutScrap(int scID);
void PutToInline(const QString& buffer);
@@ -643,6 +649,9 @@
void initDefaultValues();
void initKeyboardShortcuts();
void initPalettes();
+
+ //! \brief Caption pinned while a special edit mode is active.
+ QString m_windowCaptionOverride;
void initScrapbook();
void updateColorMenu(QProgressBar* progressBar = nullptr);
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp (revision 27773)
+++ scribus/scribus.cpp (working copy)
@@ -1566,7 +1566,10 @@
const int docSelectionCount = doc->m_Selection->count();
if (docSelectionCount == 0)
{
- setStatusBarInfoText("");
+ if (doc->masterPageMode())
+ setStatusBarInfoText(tr("Editing Master Page: %1").arg(doc->currentPage()->pageName()));
+ else
+ setStatusBarInfoText("");
return;
}
QString widthTxt = value2String(doc->m_Selection->width(), doc->unitIndex(), true, true);
@@ -2436,6 +2439,8 @@
if (scw == ActWin)
return;
ActWin = scw;
+ // A special edit mode belongs to the document that entered it.
+ m_windowCaptionOverride.clear();
if (ActWin->doc() == nullptr)
return;
if (doc != nullptr)
@@ -7618,7 +7623,7 @@
// propertiesPalette->transparencyPalette->hideEditedPatterns(patternsDependingOnThis);
if (outlinePalette->isVisible())
outlinePalette->BuildTree(false);
- updateActiveWindowCaption( tr("Editing Symbol: %1").arg(temp));
+ setWindowCaptionOverride( tr("Editing Symbol: %1").arg(temp));
}
void ScribusMainWindow::editSymbolEnd()
@@ -7647,7 +7652,7 @@
layerPalette->setEnabled(true);
if (outlinePalette->isVisible())
outlinePalette->BuildTree(false);
- updateActiveWindowCaption(doc->documentFileName());
+ setWindowCaptionOverride(QString());
}
void ScribusMainWindow::editInlineStart(int id)
@@ -7669,7 +7674,7 @@
inlinePalette->editingStart(id);
if (outlinePalette->isVisible())
outlinePalette->BuildTree(false);
- updateActiveWindowCaption( tr("Editing Inline Item"));
+ setWindowCaptionOverride( tr("Editing Inline Item"));
}
void ScribusMainWindow::editInlineEnd()
@@ -7696,7 +7701,7 @@
layerPalette->setEnabled(true);
if (outlinePalette->isVisible())
outlinePalette->BuildTree(false);
- updateActiveWindowCaption(doc->documentFileName());
+ setWindowCaptionOverride(QString());
}
void ScribusMainWindow::editMasterPagesStart(const QString& temp)
@@ -7709,6 +7714,7 @@
mpName = doc->currentPage()->masterPageName();
else
mpName = temp;
+ setWindowCaptionOverride(tr("Editing Master Page: %1").arg(mpName));
view->deselectItems(true);
if (doc->drawAsPreview)
{
@@ -7749,6 +7755,7 @@
void ScribusMainWindow::editMasterPagesEnd()
{
view->hideMasterPage();
+ setWindowCaptionOverride(QString());
if (m_WasAutoSave)
{
doc->setAutoSave(true);
@@ -8695,7 +8702,22 @@
{
if (!HaveDoc)
return;
- ActWin->setWindowTitle(QDir::toNativeSeparators(newCaption));
+ QString caption(newCaption);
+ if (!m_windowCaptionOverride.isEmpty())
+ {
+ caption = m_windowCaptionOverride;
+ if (doc->isModified())
+ caption += "*";
+ }
+ ActWin->setWindowTitle(QDir::toNativeSeparators(caption));
+}
+
+void ScribusMainWindow::setWindowCaptionOverride(const QString& caption)
+{
+ m_windowCaptionOverride = caption;
+ if (!HaveDoc)
+ return;
+ updateActiveWindowCaption(doc->documentFileName() + (doc->isModified() ? "*" : ""));
}
void ScribusMainWindow::dragEnterEvent ( QDragEnterEvent* e)
Index: scribus/ui/pagepalette_masterpages.cpp
===================================================================
--- scribus/ui/pagepalette_masterpages.cpp (revision 27773)
+++ scribus/ui/pagepalette_masterpages.cpp (working copy)
@@ -525,6 +525,7 @@
item->setData(Qt::UserRole, newName);
masterPageListBox->blockSignals(sigBlocked);
updateMasterPageList(newName);
+ m_view->refreshMasterModeLabels();
}
}
|
|
|
Moreover, it adds "Editing Master Page: X" to the title bar of the app and tab (in tabbed view). Also, in the status bar when it is free and not showing anything important. @ale @JLuc @cbradney |
|
|
+1 That helps understanding there is something special about this edit view. |
|
|
First impression: I would not put the "MASTER PAGE" text there, just the name of the master page. The "End Edit" button should probably integrated with the "banner" and the other button with the name can then be removed. |
|
|
There is only one button "End Edit", the strip next to it is not a button, it is just a name plate showing the name of the current master page. (Showing the name below the blue tab would be awkward if I went with stacked letters, or the horizontal way would take much space and would not fir there). So I went with showing the name near the button instead. I understand "Master Page" seems generic but that is what we call the mode and it is the purpose, to make it clear that it is that mode. There was no indication anywhere showing the orientation so I used the space below the blue tab on the right to show Left/Right as well. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2014-07-13 14:16 | Kunda | New Issue | |
| 2014-07-13 14:16 | Kunda | File Added: better-indication-we-are-in-masterpage-mode.png | |
| 2014-07-13 14:30 | Kunda | Relationship added | child of 0003837 |
| 2014-07-21 17:03 | Kunda | Relationship added | related to 0012108 |
| 2014-10-20 12:43 | Kunda | Relationship added | related to 0012478 |
| 2016-05-05 17:44 | JLuc | Note Added: 0040801 | |
| 2016-05-05 17:47 | JLuc | File Added: Papier_milli_gris_a4_italien.svg | |
| 2016-05-05 17:48 | JLuc | File Added: papier millimétre.jpg | |
| 2016-05-05 17:49 | JLuc | Note Edited: 0040801 | |
| 2016-05-05 17:50 | JLuc | Note Added: 0040802 | |
| 2016-05-06 01:27 | Kunda | Note Added: 0040809 | |
| 2016-05-06 01:27 | Kunda | Tag Attached: discussion | |
| 2016-05-06 07:10 | PeterBenedek | File Added: MasterPageMode.png | |
| 2016-05-06 07:12 | PeterBenedek | File Deleted: MasterPageMode.png | |
| 2016-05-06 07:12 | PeterBenedek | File Added: MasterPageMode.jpg | |
| 2016-05-06 07:12 | PeterBenedek | Note Added: 0040813 | |
| 2016-05-06 09:37 | ale | Note Added: 0040821 | |
| 2016-05-23 12:15 | Kunda | Note Added: 0041340 | |
| 2016-11-01 10:07 | FirasH | Relationship added | related to 0013223 |
| 2016-11-18 12:17 | Kunda | Tag Attached: masterpage | |
| 2016-11-18 12:19 | Kunda | Relationship added | related to 0013323 |
| 2016-11-18 13:30 | ale | Note Added: 0042456 | |
| 2016-11-18 21:39 |
|
File Added: Illustrator_group_breadcrumb.png | |
| 2016-11-18 21:39 |
|
Note Added: 0042464 | |
| 2026-08-19 16:02 | qirat | Note Added: 0054233 | |
| 2026-08-19 16:02 | qirat | File Added: mp-master-page-mode-indicator.png | |
| 2026-08-19 16:02 | qirat | File Added: mp-masterpage-edit-indicator-v2.14.patch | |
| 2026-08-19 16:09 | qirat | Note Added: 0054234 | |
| 2026-08-19 17:58 | JLuc | Note Added: 0054235 | |
| 2026-08-20 09:35 | ale | Note Added: 0054250 | |
| 2026-08-21 00:37 | qirat | Note Added: 0054257 |