21#include <QApplication>
24#include <QDeadlineTimer>
25#include <QStandardPaths>
27#include <QDesktopServices>
35#include <QPrintDialog>
43#include <QActionGroup>
44#include <QRegularExpression>
47#include <klocalizedstring.h>
49#include <kselectaction.h>
139 if(
dynamic_cast<QWheelEvent*
>(event)
140 ||
dynamic_cast<QKeyEvent*
>(event)
141 ||
dynamic_cast<QMouseEvent*
>(event)) {
286 d->
mainWindow =
dynamic_cast<QMainWindow*
>(parent);
349 KoColor foreground(Qt::black, cs);
351 KoColor background(Qt::white, cs);
412 KSharedConfigPtr config = KSharedConfig::openConfig();
413 KConfigGroup miscGroup = config->group(
"Misc");
414 const uint handleRadius = miscGroup.readEntry(
"HandleRadius", 5);
457 doc->disconnect(
this);
472 d->
softProof->setChecked(imageView->softProofing());
473 d->
gamutCheck->setChecked(imageView->gamutCheck());
478 if (
KisConfig(
true).readEntry<bool>(
"EnablePositionLabel",
false)) {
480 SIGNAL(documentMousePositionChanged(QPointF)),
482 SLOT(documentMousePositionChanged(QPointF)));
522 QSignalBlocker b(d->viewPrintSize);
523 d->viewPrintSize->setChecked(value);
525 d->
viewPrintSize->setChecked(imageView->canvasController()->usePrintResolutionMode());
531 imageView->zoomManager()->zoomAction(),
533 imageView->zoomManager()->zoomAction()->setUsePrintResolutionMode(imageView->canvasController()->usePrintResolutionMode());
536 imageView->canvasController(),
572 image(), SIGNAL(sigSizeChanged(QPointF,QPointF)),
576 image(), SIGNAL(sigResolutionChanged(
double,
double)),
776 connect(tAction, SIGNAL(toggled(
bool)),
this, SLOT(
showStatusBar(
bool)));
779 tAction->setChecked(
false);
780 connect(tAction, SIGNAL(toggled(
bool)),
this, SLOT(
switchCanvasOnly(
bool)));
899 const int busyWaitDelay = 1000;
901 dialog.blockIfImageIsBusy();
903 return dialog.result() == QDialog::Accepted;
932 KisImageReadOnlyBarrierLock l(srcDoc->
image());
933 doc = srcDoc->
clone(
true);
938 if (name.isEmpty()) {
941 name = i18n(
"%1 (Copy)", name);
957 QMainWindow* w = qobject_cast<QMainWindow*>(qApp->activeWindow());
978 QString path = QFileInfo(
document()->localFilePath()).canonicalPath();
981 if (QDir(path).exists()) {
985 dialog.setDirectoryUrl(QUrl(
document()->localFilePath()));
986 return dialog.filename();
989 return QFileInfo(
document()->localFilePath()).canonicalPath();
1004 bool fileAlreadyExists;
1006 QString version =
"000";
1011 QString fileName = QFileInfo(
document()->localFilePath()).fileName();
1016 QRegularExpression regex(
"_(\\d{1,4})([a-z])?([\\.|~])");
1017 QRegularExpressionMatch match;
1018 foundVersion = fileName.contains(regex, &match);
1019 isBackup = foundVersion ? match.captured(3) ==
"~" :
false;
1023 version = match.captured(1);
1024 letter = match.captured(2);
1027 QRegularExpression regex2(
"\\.\\w{2,4}$");
1028 QRegularExpressionMatch match = regex2.match(fileName);
1029 QString extensionPlusVersion = match.captured(0);
1030 extensionPlusVersion.prepend(version);
1031 extensionPlusVersion.prepend(
"_");
1032 fileName.replace(regex2, extensionPlusVersion);
1036 int intVersion = version.toInt(0);
1038 QString baseNewVersion = QString::number(intVersion);
1039 while (baseNewVersion.length() < version.length()) {
1040 baseNewVersion.prepend(
"0");
1045 newVersion = baseNewVersion;
1046 newVersion.prepend(
"_");
1047 if (!letter.isNull()) newVersion.append(letter);
1049 newVersion.append(
"~");
1051 newVersion.append(
".");
1053 fileName.replace(regex, newVersion);
1054 fileAlreadyExists = QFileInfo(path +
'/' + fileName).exists();
1055 if (fileAlreadyExists) {
1056 if (!letter.isNull()) {
1057 char letterCh = letter.at(0).toLatin1();
1059 letter = QString(QChar(letterCh));
1064 }
while (fileAlreadyExists && letter !=
"{");
1066 if (letter ==
"{") {
1067 QMessageBox::critical(
mainWindow(), i18nc(
"@title:window",
"Couldn't save incremental version"), i18n(
"Alternative names exhausted, try manually saving with a higher number"));
1070 QString newFilePath = path +
'/' + fileName;
1075 QUrl::fromLocalFile(
document()->path()));
1082 if (
document()->path().isEmpty()) {
1088 bool workingOnBackup;
1089 bool fileAlreadyExists;
1090 QString version =
"000";
1094 QString fileName = QFileInfo(
document()->localFilePath()).fileName();
1097 QRegularExpression regex(
"~(\\d{1,4})([a-z])?\\.");
1098 QRegularExpressionMatch match;
1099 workingOnBackup = fileName.contains(regex, &match);
1101 if (workingOnBackup) {
1103 version = match.captured(1);
1104 letter = match.captured(2);
1107 int intVersion = version.toInt(0);
1109 QString baseNewVersion = QString::number(intVersion);
1111 while (baseNewVersion.length() < version.length()) {
1112 baseNewVersion.prepend(
"0");
1117 newVersion = baseNewVersion;
1118 newVersion.prepend(
"~");
1119 if (!letter.isNull()) newVersion.append(letter);
1120 newVersion.append(
".");
1121 backupFileName.replace(regex, newVersion);
1122 fileAlreadyExists = QFile(path +
'/' + backupFileName).exists();
1123 if (fileAlreadyExists) {
1124 if (!letter.isNull()) {
1125 char letterCh = letter.at(0).toLatin1();
1127 letter = QString(QChar(letterCh));
1132 }
while (fileAlreadyExists && letter !=
"{");
1134 if (letter ==
"{") {
1135 QMessageBox::critical(
mainWindow(), i18nc(
"@title:window",
"Couldn't save incremental backup"), i18n(
"Alternative names exhausted, try manually saving with a higher number"));
1138 QFile::copy(path +
'/' + fileName, path +
'/' + backupFileName);
1143 const quint8 HARDCODED_DIGIT_COUNT = 3;
1144 QString baseNewVersion =
"000";
1145 QString backupFileName = QFileInfo(
document()->localFilePath()).fileName();
1146 QRegularExpression regex2(
"\\.\\w{2,4}$");
1147 QRegularExpressionMatch match = regex2.match(fileName);
1148 QString extensionPlusVersion = match.captured(0);
1149 extensionPlusVersion.prepend(baseNewVersion);
1150 extensionPlusVersion.prepend(
"~");
1151 backupFileName.replace(regex2, extensionPlusVersion);
1155 newVersion = baseNewVersion;
1156 newVersion.prepend(
"~");
1157 newVersion.append(
".");
1158 backupFileName.replace(regex, newVersion);
1159 fileAlreadyExists = QFile(path +
'/' + backupFileName).exists();
1160 if (fileAlreadyExists) {
1162 int intVersion = baseNewVersion.toInt(0);
1164 baseNewVersion = QString::number(intVersion);
1165 while (baseNewVersion.length() < HARDCODED_DIGIT_COUNT) {
1166 baseNewVersion.prepend(
"0");
1169 }
while (fileAlreadyExists);
1173 QFile::copy(path +
'/' + fileName, path +
'/' + backupFileName);
1202 if(mw && mw->statusBar()) {
1203 mw->statusBar()->setVisible(toggled);
1227 dbgUI <<
"Unable to switch to canvas-only mode, main window not found";
1241 bool wasToolBarPopupOpen =
false;
1242 for (QToolBar *toolBar : toolBars) {
1243 for (QToolButton *
button : toolBar->findChildren<QToolButton *>(QStringLiteral(
"qt_toolbar_ext_button"))) {
1244 if (
button->isChecked()) {
1245 wasToolBarPopupOpen =
true;
1251 if(wasToolBarPopupOpen) {
1274 !
main->canvasDetached();
1276 if (useCanvasOffsetCompensation) {
1309 if (toggleFullscreen) {
1311 origin =
main->geometry().topLeft() -
main->screen()->geometry().topLeft();
1321 if (
main->statusBar()) {
1323 if (
main->statusBar()->dynamicPropertyNames().contains(
"wasvisible")) {
1324 if (
main->statusBar()->property(
"wasvisible").toBool()) {
1325 main->statusBar()->setVisible(
true);
1330 main->statusBar()->setProperty(
"wasvisible",
main->statusBar()->isVisible());
1331 main->statusBar()->setVisible(
false);
1337 KisAction* action = qobject_cast<KisAction*>(
main->actionCollection()->action(
"view_toggledockers"));
1339 action->setCheckable(
true);
1341 if (action->isChecked()) {
1343 action->setChecked(
false);
1355 if (toggleFullscreen) {
1357 main->setWindowState(
main->windowState() | Qt::WindowFullScreen);
1359 main->setWindowState(
main->windowState() & ~Qt::WindowFullScreen);
1365 if (
main->menuBar()->dynamicPropertyNames().contains(
"wasvisible")) {
1366 if (
main->menuBar()->property(
"wasvisible").toBool()) {
1367 main->menuBar()->setVisible(
true);
1372 main->menuBar()->setProperty(
"wasvisible",
main->menuBar()->isVisible());
1373 main->menuBar()->setVisible(
false);
1382 Q_FOREACH (QToolBar* toolbar, toolBars) {
1384 if (toolbar->dynamicPropertyNames().contains(
"wasvisible")) {
1385 if (toolbar->property(
"wasvisible").toBool()) {
1386 toolbar->setVisible(
true);
1391 toolbar->setProperty(
"wasvisible", toolbar->isVisible());
1392 toolbar->setVisible(
false);
1413 QTimer::singleShot(0,
this, [
this] () {
1420 actionCollection()->action(
"view_show_canvas_only")->shortcut().toString(QKeySequence::NativeText)), QIcon(),
1430 if (useCanvasOffsetCompensation && toggled) {
1433 const bool allowedZoomMode =
1437 if (allowedZoomMode) {
1439 QTimer::singleShot(0,
this, [
this] () {
1455 QSignalBlocker blocker(action);
1470 QString folderInStandardAppData;
1471 QString folderInPrivateAppData;
1474 if (!folderInPrivateAppData.isEmpty()) {
1476 const auto pathToDisplay = [](
const QString &path) {
1484 return QDir::toNativeSeparators(path).replace(QChar(
'\\'), QStringLiteral(
u"\\\u200B"));
1487 QMessageBox mbox(qApp->activeWindow());
1488 mbox.setIcon(QMessageBox::Information);
1489 mbox.setWindowTitle(i18nc(
"@title:window resource folder",
"Open Resource Folder"));
1492 mbox.setText(i18nc(
"@info resource folder",
1493 "<p>You are using the Microsoft Store package version of Krita. "
1494 "Even though Krita can be configured to place resources under the "
1495 "user AppData location, Windows may actually store the files "
1496 "inside a private app location.</p>\n"
1497 "<p>You should check both locations to determine where "
1498 "the files are located.</p>\n"
1499 "<p><b>User AppData</b>:<br/>\n"
1501 "<p><b>Private app location</b>:<br/>\n"
1503 pathToDisplay(folderInStandardAppData),
1504 pathToDisplay(folderInPrivateAppData)
1506 mbox.setTextInteractionFlags(Qt::NoTextInteraction);
1508 const auto *btnOpenUserAppData = mbox.addButton(i18nc(
"@action:button resource folder",
"Open in &user AppData"), QMessageBox::AcceptRole);
1509 const auto *btnOpenPrivateAppData = mbox.addButton(i18nc(
"@action:button resource folder",
"Open in &private app location"), QMessageBox::AcceptRole);
1511 mbox.addButton(QMessageBox::Close);
1512 mbox.setDefaultButton(QMessageBox::Close);
1515 if (mbox.clickedButton() == btnOpenPrivateAppData) {
1516 resourcePath = folderInPrivateAppData;
1517 }
else if (mbox.clickedButton() == btnOpenUserAppData) {
1526 QDesktopServices::openUrl(QUrl::fromLocalFile(resourcePath));
1533 Q_FOREACH (QDockWidget* dock, dockers) {
1538 if (qobject_cast<KoToolDocker*>(dock)) {
1542 QObjectList objects;
1543 objects.append(dock);
1544 while (!objects.isEmpty()) {
1545 QObject*
object = objects.takeFirst();
1546 objects.append(object->children());
1565 d->
currentImageView->showFloatingMessage(message, icon, timeout, priority, alignment);
1584 int timeoutMsec = 500;
1587 messageToClear.clear();
1594 if (haveZoomMessage) {
1595 if (haveRotationMessage) {
1600 }
else if (haveRotationMessage) {
1611 return qobject_cast<KisMainWindow*>(
d->
mainWindow);
1629 d->
currentImageView->canvasController()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
1630 d->
currentImageView->canvasController()->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
1632 d->
currentImageView->canvasController()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
1633 d->
currentImageView->canvasController()->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
1656 KConfigGroup appAuthorGroup(KSharedConfig::openConfig(),
"Author");
1657 if (profileName.isEmpty() || profileName == i18nc(
"choice for author profile",
"Anonymous")) {
1658 appAuthorGroup.writeEntry(
"active-profile",
"");
1660 appAuthorGroup.writeEntry(
"active-profile", profileName);
1662 appAuthorGroup.sync();
1675 d->
actionAuthor->addAction(i18nc(
"choice for author profile",
"Anonymous"));
1677 KConfigGroup authorGroup(KSharedConfig::openConfig(),
"Author");
1681 QDir dir(authorInfo);
1682 Q_FOREACH(QString entry, dir.entryList(filters)) {
1683 int ln = QString(
".authorinfo").size();
1685 if (!profiles.contains(entry)) {
1686 profiles.append(entry);
1689 Q_FOREACH (
const QString &profile , profiles) {
1693 KConfigGroup appAuthorGroup(KSharedConfig::openConfig(),
"Author");
1694 QString profileName = appAuthorGroup.readEntry(
"active-profile",
"");
1696 if (profileName ==
"anonymous" || profileName.isEmpty()) {
1698 }
else if (profiles.contains(profileName)) {
1718 QSet<KoShape*> dummy;
1785 if (isOpacityPresetMode) {
float value(const T *src, size_t ch)
QList< QString > QStringList
A KisActionManager class keeps track of KisActions. These actions are always associated with the GUI....
void setView(QPointer< KisView > imageView)
KisAction * createAction(const QString &name)
KisAction * actionByName(const QString &name) const
KisAction * createStandardAction(KStandardAction::StandardAction, const QObject *receiver, const char *member)
void setDefaultShortcut(const QKeySequence &shortcut)
void mirrorCanvas(bool enable)
WrapAroundAxis wrapAroundModeAxis() const
void setUsePrintResolutionMode(bool value)
bool wrapAroundMode() const
bool levelOfDetailMode() const
void resetCanvasRotation()
void sigUsePrintResolutionModeChanged(bool value)
void setup(KisActionManager *actionManager)
void setView(QPointer< KisView >imageView)
void slotOnScreenResolutionChanged()
void setColorHistoryColors(const QList< KoColor > &colors)
void slotImageSizeChanged()
void setFGColor(const KoColor &c)
void setResourceManager(KoCanvasResourceProvider *resourceManager)
void setBGColor(const KoColor &c)
void addProxy(KoProgressProxy *proxy)
void removeProxy(KoProgressProxy *proxy)
static KisConfigNotifier * instance()
bool hideScrollbars(bool defaultValue=false) const
void setShowDockers(const bool value) const
void setShowStatusBar(const bool value) const
void writeEntry(const QString &name, const T &value)
void writeKoColors(const QString &name, const QList< KoColor > &colors) const
bool fullscreenMode(bool defaultValue=false) const
bool pixelGridEnabled(bool defaultValue=false) const
void setRulersTrackMouse(bool value) const
bool hideScrollbarsFullscreen(bool defaultValue=false) const
bool showCanvasMessages(bool defaultValue=false) const
QList< KoColor > readKoColors(const QString &name) const
OutlineStyle lastUsedOutlineStyle(bool defaultValue=false) const
KoColor readKoColor(const QString &name, const KoColor &color=KoColor()) const
OutlineStyle newOutlineStyle(bool defaultValue=false) const
void setNewOutlineStyle(OutlineStyle style)
void setShowRulers(bool rulers) const
bool showDockers(bool defaultValue=false) const
bool useOpenGL(bool defaultValue=false) const
bool rulersTrackMouse(bool defaultValue=false) const
bool showStatusBar(bool defaultValue=false) const
bool showRulers(bool defaultValue=false) const
void setLastUsedOutlineStyle(OutlineStyle style)
void writeKoColor(const QString &name, const KoColor &color) const
KisPaintopBox * paintopBox()
void setup(QWidget *parent)
void setView(QPointer< KisView > imageView)
void setup(KisActionManager *actionManager)
void setFileBatchMode(const bool batchMode)
KoDocumentInfo * documentInfo() const
QString localFilePath() const
bool saveAs(const QString &path, const QByteArray &mimeType, bool showWarnings, KisPropertiesConfigurationSP exportConfiguration=0)
KisDocument * clone(bool addStorage=false)
creates a clone of the document and returns it. Please make sure that you hold all the necessary lock...
void setup(KisKActionCollection *ac, KisActionManager *actionManager)
void setView(QPointer< KisView >imageView)
void setView(QPointer< KisView >imageView)
void setup(KisActionManager *actionManager)
void setView(QPointer< KisView > view)
void setup(KisActionManager *actionManager)
void setImage(KisImageSP image)
void setView(QPointer< KisView >imageView)
void setup(KisActionManager *actionManager)
KisUndoAdapter * undoAdapter() const
KisCompositeProgressProxy * compositeProgressProxy()
A container for a set of QAction objects.
Q_INVOKABLE QAction * addAction(const QString &name, QAction *action)
QAction * action(int index) const
KisView * addViewAndNotifyLoadingCompleted(KisDocument *document, QMdiSubWindow *subWindow=0)
QList< QDockWidget * > dockWidgets() const
Return the list of dock widgets belonging to this main window.
bool saveDocument(KisDocument *document, bool saveas, bool isExporting, bool isAdvancedExporting=false)
void setView(QPointer< KisView > imageView)
void setup(KisKActionCollection *collection)
void setView(QPointer< KisView >imageView)
void setup(KisKActionCollection *collection, KisActionManager *actionManager)
KisNodeSP activeNode()
Convenience function to get the active layer or mask.
KisPaintDeviceSP activePaintDevice()
Get the paint device the user wants to paint on now.
static KisPart * instance()
void addDocument(KisDocument *document, bool notify=true)
void queueAddRecentURLToAllMainWindowsOnFileSaved(QUrl url, QUrl oldUrl=QUrl())
QString resourceLocationBase() const
resourceLocationBase is the place where all resource storages (folder, bundles etc....
static KisResourceLocator * instance()
void setup(KisActionManager *actionManager)
void setView(QPointer< KisView >imageView)
void addUniqueConnection(Sender sender, Signal signal, Receiver receiver, Method method)
void addConnection(Sender sender, Signal signal, Receiver receiver, Method method, Qt::ConnectionType type=Qt::AutoConnection)
void setView(QPointer< KisView > imageView)
void hideAllStatusBarItems()
void showAllStatusBarItems()
KoProgressUpdater * progressUpdater()
static void createTemplate(const QString &templatesResourcePath, const char *suffix, KisDocument *document, QWidget *parent=0)
The KisTextPropertyManager class.
void setCanvasResourceProvider(KisCanvasResourceProvider *provider)
setCanvasResourceProvider set the canvas resource provider.
KisAction * rulersTrackMouseAction
KisAction * zoomToFitHeight
QScopedPointer< KoProgressUpdater > persistentUnthreadedProgressUpdaterRouter
QPointer< KisFloatingMessage > savedFloatingMessage
KisAction * wrapAroundAction
KisSelectionManager selectionManager
KisAction * wrapAroundHAxisAction
QPointer< KisView > currentImageView
KSelectAction * actionAuthor
KisSignalCompressor guiUpdateCompressor
KisInputManager inputManager
QActionGroup * wrapAroundAxisActions
KisFilterManager filterManager
KisSignalAutoConnectionsStore viewConnections
KisAction * viewPrintSize
BlockingUserInputEventFilter blockingEventFilter
KisIdleTasksManager idleTasksManager
KisAction * showRulersAction
KisCanvasControlsManager canvasControlsManager
QByteArray canvasStateInCanvasOnlyMode
KisGuidesManager guidesManager
QPointer< KoUpdater > persistentUnthreadedProgressUpdater
KisAction * rotateCanvasRight
KisViewManagerPrivate(KisViewManager *_q, KisKActionCollection *_actionCollection, QWidget *_q_parent)
KisMirrorManager mirrorManager
QDeadlineTimer zoomRotationMessageTimer
KisAction * saveIncrementalBackup
QPoint canvasOnlyOffsetCompensation
QByteArray canvasStateInNormalMode
KisAction * toggleBrushOutline
KisAction * rotateCanvasLeft
KisActionManager actionManager
KisAction * levelOfDetailAction
QPointer< KoUpdater > persistentImageProgressUpdater
KisDecorationsManager paintingAssistantsManager
KisAction * showPixelGrid
KisAction * wrapAroundVAxisAction
KisImageManager imageManager
KisAction * openResourcesDirectory
KisCanvasResourceProvider canvasResourceProvider
KisAction * resetCanvasRotation
KisAction * wrapAroundHVAxisAction
KisKActionCollection * actionCollection
KisGridManager gridManager
KisAction * saveIncremental
KoCanvasResourceProvider canvasResourceManager
KisControlFrame controlFrame
KisAction * toggleZoomToFit
bool blockUntilOperationsFinishedImpl(KisImageSP image, bool force)
std::optional< CanvasOnlyOptions > canvasOnlyOptions
KisAction * createTemplate
KisAction * zoomToFitWidth
KisTextPropertiesManager textPropertyManager
KisNodeManager nodeManager
void slotUpdatePixelGridAction()
bool blockUntilOperationsFinished(KisImageSP image)
blockUntilOperationsFinished blocks the GUI of the application until execution of actions on image is...
KisMainWindow * mainWindow() const
void slotCreateTemplate()
KisDocument * document() const
static void initializeResourceManager(KoCanvasResourceProvider *resourceManager)
KisFilterManager * filterManager()
The filtermanager handles everything action-related to filters.
void slotSaveRulersTrackMouseState(bool value)
KisActionManager * actionManager() const
void floatingMessageRequested(const QString &message, const QString &iconName)
void updateIcons()
Update the style of all the icons.
KisIdleTasksManager * idleTasksManager()
KisCanvas2 * canvasBase() const
Return the canvas base class.
void switchCanvasOnly(bool toggled)
KisUndoAdapter * undoAdapter()
The undo adapter is used to add commands to the undo stack.
void showFloatingZoomMessage(const QString &message)
void slotActivateTransformTool()
void setCurrentView(KisView *view)
void slotSaveIncremental()
void brushOutlineToggled()
void openResourcesDirectory()
void setQtMainWindow(QMainWindow *newMainWindow)
KisImageManager * imageManager()
void handleFloatingZoomRotationMessage(QString &messageToClear)
KisSelectionSP selection()
void setShowFloatingMessage(bool show)
void slotUpdateAuthorProfileActions()
void enableControls()
disable and enable toolbar controls. used for disabling them during painting.
void updateCanvasOnlyActionState()
QPointer< KoUpdater > createThreadedUpdater(const QString &name)
QWidget * canvas() const
Return the actual widget that is displaying the current image.
void viewChanged()
viewChanged sent out when the view has changed.
KisLayerSP activeLayer()
Convenience method to get at the active layer.
KisPaintDeviceSP activeDevice()
Convenience method to get at the active paint device.
void slotViewAdded(KisView *view)
void blockUntilOperationsFinishedForced(KisImageSP image)
blockUntilOperationsFinished blocks the GUI of the application until execution of actions on image is...
virtual KisKActionCollection * actionCollection() const
void showHideScrollbars()
void slotSaveIncrementalBackup()
void showStatusBar(bool toggled)
KisInputManager * inputManager() const
Filters events and sends them to canvas actions.
QPointer< KoUpdater > createUnthreadedUpdater(const QString &name)
create a new progress updater
QMainWindow * qtMainWindow() const
~KisViewManager() override
KisViewManagerPrivate *const d
KisNodeManager * nodeManager() const
The node manager handles everything about nodes.
void slotSaveShowRulersState(bool value)
void slotToggleBrushOutline()
KisSelectionManager * selectionManager()
void slotViewRemoved(KisView *view)
KisGuidesManager * guidesManager() const
QWidget * mainWindowAsQWidget() const
void slotCreateOpacityResource(bool isOpacityPresetMode, KoToolBase *tool)
KisImageWSP image() const
Return the image this view is displaying.
KisViewManager(QWidget *parent, KisKActionCollection *actionCollection)
void toggleTabletLogger()
static void testingInitializeOpacityToPresetResourceConverter(KoCanvasResourceProvider *resourceManager)
void showFloatingRotationMessage(const QString &message)
KisGridManager * gridManager() const
void notifyWorkspaceLoaded()
KisZoomManager * zoomManager()
The zoommanager handles everything action-related to zooming.
KisCanvasResourceProvider * canvasResourceProvider()
KisStatusBar * statusBar() const
Return the wrapper class around the statusbar.
KisTextPropertiesManager * textPropertyManager() const
void changeAuthorProfile(const QString &profileName)
KisPaintopBox * paintOpBox() const
bool selectionEditable()
Checks if the current global or local selection is editable.
void showFloatingMessage(const QString &message, const QIcon &icon, int timeout=4500, KisFloatingMessage::Priority priority=KisFloatingMessage::Medium, int alignment=Qt::AlignCenter|Qt::TextWordWrap)
shows a floating message in the top right corner of the canvas
QPointer< KisViewManager > viewManager
void effectiveZoomChanged(qreal zoom)
void addActiveCanvasResourceDependency(KoActiveCanvasResourceDependencySP dep)
void setHandleRadius(int handleSize)
void setBackgroundColor(const KoColor &color)
KoColor foregroundColor() const
KoColor backgroundColor() const
void setForegroundColor(const KoColor &color)
void addResourceUpdateMediator(KoResourceUpdateMediatorSP mediator)
void addDerivedResourceConverter(KoDerivedResourceConverterSP converter)
void setAboutInfo(const QString &info, const QString &data)
QString aboutInfo(const QString &info) const
QPointer< KoUpdater > startSubtask(int weight=1, const QString &name=QString(), bool isPersistent=false)
static void getAllUserResourceFoldersLocationsForWindowsStore(QString &standardLocation, QString &privateLocation)
getAllAppDataLocationsForWindowsStore Use this to get both private and general appdata folders which ...
static QString getAppDataLocation()
void sigUsePrintResolutionModeChanged(bool value)
void setUsePrintResolutionMode(bool value)
@ ZOOM_HEIGHT
zoom pageheight
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
QSharedPointer< T > toQShared(T *ptr)
QString button(const QWheelEvent &ev)
int main(int argc, char **argv)
QIcon loadIcon(const QString &name)
void updateIconCommon(QObject *object)
@ BackgroundColor
The active background color selected for this canvas.
@ ForegroundColor
The active foreground color selected for this canvas.
bool isEditable(bool checkVisibility=true) const
virtual KisSelectionMaskSP selectionMask() const
static KisResourceItemChooserSync * instance()
bool operator==(const CanvasOnlyOptions &rhs)
bool hideTitlebarFullscreen
bool hideStatusbarFullscreen
CanvasOnlyOptions(const KisConfig &cfg)
bool hideDockersFullscreen
bool hideToolbarFullscreen
static KoColorSpaceRegistry * instance()
const KoColorSpace * rgb8(const QString &profileName=QString())