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>
138 if(
dynamic_cast<QWheelEvent*
>(event)
139 ||
dynamic_cast<QKeyEvent*
>(event)
140 ||
dynamic_cast<QMouseEvent*
>(event)) {
285 d->
mainWindow =
dynamic_cast<QMainWindow*
>(parent);
348 KoColor foreground(Qt::black, cs);
350 KoColor background(Qt::white, cs);
411 KSharedConfigPtr config = KSharedConfig::openConfig();
412 KConfigGroup miscGroup = config->group(
"Misc");
413 const uint handleRadius = miscGroup.readEntry(
"HandleRadius", 5);
456 doc->disconnect(
this);
471 d->
softProof->setChecked(imageView->softProofing());
472 d->
gamutCheck->setChecked(imageView->gamutCheck());
477 if (
KisConfig(
true).readEntry<bool>(
"EnablePositionLabel",
false)) {
479 SIGNAL(documentMousePositionChanged(QPointF)),
481 SLOT(documentMousePositionChanged(QPointF)));
521 QSignalBlocker b(d->viewPrintSize);
522 d->viewPrintSize->setChecked(value);
524 d->
viewPrintSize->setChecked(imageView->canvasController()->usePrintResolutionMode());
530 imageView->zoomManager()->zoomAction(),
532 imageView->zoomManager()->zoomAction()->setUsePrintResolutionMode(imageView->canvasController()->usePrintResolutionMode());
535 imageView->canvasController(),
571 image(), SIGNAL(sigSizeChanged(QPointF,QPointF)),
575 image(), SIGNAL(sigResolutionChanged(
double,
double)),
775 connect(tAction, SIGNAL(toggled(
bool)),
this, SLOT(
showStatusBar(
bool)));
778 tAction->setChecked(
false);
779 connect(tAction, SIGNAL(toggled(
bool)),
this, SLOT(
switchCanvasOnly(
bool)));
898 const int busyWaitDelay = 1000;
900 dialog.blockIfImageIsBusy();
902 return dialog.result() == QDialog::Accepted;
931 KisImageReadOnlyBarrierLock l(srcDoc->
image());
932 doc = srcDoc->
clone(
true);
937 if (name.isEmpty()) {
940 name = i18n(
"%1 (Copy)", name);
956 QMainWindow* w = qobject_cast<QMainWindow*>(qApp->activeWindow());
977 QString path = QFileInfo(
document()->localFilePath()).canonicalPath();
980 if (QDir(path).exists()) {
984 dialog.setDirectoryUrl(QUrl(
document()->localFilePath()));
985 return dialog.filename();
988 return QFileInfo(
document()->localFilePath()).canonicalPath();
1003 bool fileAlreadyExists;
1005 QString version =
"000";
1010 QString fileName = QFileInfo(
document()->localFilePath()).fileName();
1015 QRegularExpression regex(
"_(\\d{1,4})([a-z])?([\\.|~])");
1016 QRegularExpressionMatch match;
1017 foundVersion = fileName.contains(regex, &match);
1018 isBackup = foundVersion ? match.captured(3) ==
"~" :
false;
1022 version = match.captured(1);
1023 letter = match.captured(2);
1026 QRegularExpression regex2(
"\\.\\w{2,4}$");
1027 QRegularExpressionMatch match = regex2.match(fileName);
1028 QString extensionPlusVersion = match.captured(0);
1029 extensionPlusVersion.prepend(version);
1030 extensionPlusVersion.prepend(
"_");
1031 fileName.replace(regex2, extensionPlusVersion);
1035 int intVersion = version.toInt(0);
1037 QString baseNewVersion = QString::number(intVersion);
1038 while (baseNewVersion.length() < version.length()) {
1039 baseNewVersion.prepend(
"0");
1044 newVersion = baseNewVersion;
1045 newVersion.prepend(
"_");
1046 if (!letter.isNull()) newVersion.append(letter);
1048 newVersion.append(
"~");
1050 newVersion.append(
".");
1052 fileName.replace(regex, newVersion);
1053 fileAlreadyExists = QFileInfo(path +
'/' + fileName).exists();
1054 if (fileAlreadyExists) {
1055 if (!letter.isNull()) {
1056 char letterCh = letter.at(0).toLatin1();
1058 letter = QString(QChar(letterCh));
1063 }
while (fileAlreadyExists && letter !=
"{");
1065 if (letter ==
"{") {
1066 QMessageBox::critical(
mainWindow(), i18nc(
"@title:window",
"Couldn't save incremental version"), i18n(
"Alternative names exhausted, try manually saving with a higher number"));
1069 QString newFilePath = path +
'/' + fileName;
1074 QUrl::fromLocalFile(
document()->path()));
1081 if (
document()->path().isEmpty()) {
1087 bool workingOnBackup;
1088 bool fileAlreadyExists;
1089 QString version =
"000";
1093 QString fileName = QFileInfo(
document()->localFilePath()).fileName();
1096 QRegularExpression regex(
"~(\\d{1,4})([a-z])?\\.");
1097 QRegularExpressionMatch match;
1098 workingOnBackup = fileName.contains(regex, &match);
1100 if (workingOnBackup) {
1102 version = match.captured(1);
1103 letter = match.captured(2);
1106 int intVersion = version.toInt(0);
1108 QString baseNewVersion = QString::number(intVersion);
1110 while (baseNewVersion.length() < version.length()) {
1111 baseNewVersion.prepend(
"0");
1116 newVersion = baseNewVersion;
1117 newVersion.prepend(
"~");
1118 if (!letter.isNull()) newVersion.append(letter);
1119 newVersion.append(
".");
1120 backupFileName.replace(regex, newVersion);
1121 fileAlreadyExists = QFile(path +
'/' + backupFileName).exists();
1122 if (fileAlreadyExists) {
1123 if (!letter.isNull()) {
1124 char letterCh = letter.at(0).toLatin1();
1126 letter = QString(QChar(letterCh));
1131 }
while (fileAlreadyExists && letter !=
"{");
1133 if (letter ==
"{") {
1134 QMessageBox::critical(
mainWindow(), i18nc(
"@title:window",
"Couldn't save incremental backup"), i18n(
"Alternative names exhausted, try manually saving with a higher number"));
1137 QFile::copy(path +
'/' + fileName, path +
'/' + backupFileName);
1142 const quint8 HARDCODED_DIGIT_COUNT = 3;
1143 QString baseNewVersion =
"000";
1144 QString backupFileName = QFileInfo(
document()->localFilePath()).fileName();
1145 QRegularExpression regex2(
"\\.\\w{2,4}$");
1146 QRegularExpressionMatch match = regex2.match(fileName);
1147 QString extensionPlusVersion = match.captured(0);
1148 extensionPlusVersion.prepend(baseNewVersion);
1149 extensionPlusVersion.prepend(
"~");
1150 backupFileName.replace(regex2, extensionPlusVersion);
1154 newVersion = baseNewVersion;
1155 newVersion.prepend(
"~");
1156 newVersion.append(
".");
1157 backupFileName.replace(regex, newVersion);
1158 fileAlreadyExists = QFile(path +
'/' + backupFileName).exists();
1159 if (fileAlreadyExists) {
1161 int intVersion = baseNewVersion.toInt(0);
1163 baseNewVersion = QString::number(intVersion);
1164 while (baseNewVersion.length() < HARDCODED_DIGIT_COUNT) {
1165 baseNewVersion.prepend(
"0");
1168 }
while (fileAlreadyExists);
1172 QFile::copy(path +
'/' + fileName, path +
'/' + backupFileName);
1201 if(mw && mw->statusBar()) {
1202 mw->statusBar()->setVisible(toggled);
1226 dbgUI <<
"Unable to switch to canvas-only mode, main window not found";
1240 bool wasToolBarPopupOpen =
false;
1241 for (QToolBar *toolBar : toolBars) {
1242 for (QToolButton *
button : toolBar->findChildren<QToolButton *>(QStringLiteral(
"qt_toolbar_ext_button"))) {
1243 if (
button->isChecked()) {
1244 wasToolBarPopupOpen =
true;
1250 if(wasToolBarPopupOpen) {
1273 !
main->canvasDetached();
1275 if (useCanvasOffsetCompensation) {
1308 if (toggleFullscreen) {
1310 origin =
main->geometry().topLeft() -
main->screen()->geometry().topLeft();
1320 if (
main->statusBar()) {
1322 if (
main->statusBar()->dynamicPropertyNames().contains(
"wasvisible")) {
1323 if (
main->statusBar()->property(
"wasvisible").toBool()) {
1324 main->statusBar()->setVisible(
true);
1329 main->statusBar()->setProperty(
"wasvisible",
main->statusBar()->isVisible());
1330 main->statusBar()->setVisible(
false);
1336 KisAction* action = qobject_cast<KisAction*>(
main->actionCollection()->action(
"view_toggledockers"));
1338 action->setCheckable(
true);
1340 if (action->isChecked()) {
1342 action->setChecked(
false);
1354 if (toggleFullscreen) {
1356 main->setWindowState(
main->windowState() | Qt::WindowFullScreen);
1358 main->setWindowState(
main->windowState() & ~Qt::WindowFullScreen);
1364 if (
main->menuBar()->dynamicPropertyNames().contains(
"wasvisible")) {
1365 if (
main->menuBar()->property(
"wasvisible").toBool()) {
1366 main->menuBar()->setVisible(
true);
1371 main->menuBar()->setProperty(
"wasvisible",
main->menuBar()->isVisible());
1372 main->menuBar()->setVisible(
false);
1381 Q_FOREACH (QToolBar* toolbar, toolBars) {
1383 if (toolbar->dynamicPropertyNames().contains(
"wasvisible")) {
1384 if (toolbar->property(
"wasvisible").toBool()) {
1385 toolbar->setVisible(
true);
1390 toolbar->setProperty(
"wasvisible", toolbar->isVisible());
1391 toolbar->setVisible(
false);
1412 QTimer::singleShot(0,
this, [
this] () {
1419 actionCollection()->action(
"view_show_canvas_only")->shortcut().toString(QKeySequence::NativeText)), QIcon(),
1429 if (useCanvasOffsetCompensation && toggled) {
1432 const bool allowedZoomMode =
1436 if (allowedZoomMode) {
1438 QTimer::singleShot(0,
this, [
this] () {
1454 QSignalBlocker blocker(action);
1469 QString folderInStandardAppData;
1470 QString folderInPrivateAppData;
1473 if (!folderInPrivateAppData.isEmpty()) {
1475 const auto pathToDisplay = [](
const QString &path) {
1483 return QDir::toNativeSeparators(path).replace(QChar(
'\\'), QStringLiteral(
u"\\\u200B"));
1486 QMessageBox mbox(qApp->activeWindow());
1487 mbox.setIcon(QMessageBox::Information);
1488 mbox.setWindowTitle(i18nc(
"@title:window resource folder",
"Open Resource Folder"));
1491 mbox.setText(i18nc(
"@info resource folder",
1492 "<p>You are using the Microsoft Store package version of Krita. "
1493 "Even though Krita can be configured to place resources under the "
1494 "user AppData location, Windows may actually store the files "
1495 "inside a private app location.</p>\n"
1496 "<p>You should check both locations to determine where "
1497 "the files are located.</p>\n"
1498 "<p><b>User AppData</b>:<br/>\n"
1500 "<p><b>Private app location</b>:<br/>\n"
1502 pathToDisplay(folderInStandardAppData),
1503 pathToDisplay(folderInPrivateAppData)
1505 mbox.setTextInteractionFlags(Qt::NoTextInteraction);
1507 const auto *btnOpenUserAppData = mbox.addButton(i18nc(
"@action:button resource folder",
"Open in &user AppData"), QMessageBox::AcceptRole);
1508 const auto *btnOpenPrivateAppData = mbox.addButton(i18nc(
"@action:button resource folder",
"Open in &private app location"), QMessageBox::AcceptRole);
1510 mbox.addButton(QMessageBox::Close);
1511 mbox.setDefaultButton(QMessageBox::Close);
1514 if (mbox.clickedButton() == btnOpenPrivateAppData) {
1515 resourcePath = folderInPrivateAppData;
1516 }
else if (mbox.clickedButton() == btnOpenUserAppData) {
1525 QDesktopServices::openUrl(QUrl::fromLocalFile(resourcePath));
1532 Q_FOREACH (QDockWidget* dock, dockers) {
1537 if (qobject_cast<KoToolDocker*>(dock)) {
1541 QObjectList objects;
1542 objects.append(dock);
1543 while (!objects.isEmpty()) {
1544 QObject*
object = objects.takeFirst();
1545 objects.append(object->children());
1564 d->
currentImageView->showFloatingMessage(message, icon, timeout, priority, alignment);
1583 int timeoutMsec = 500;
1586 messageToClear.clear();
1593 if (haveZoomMessage) {
1594 if (haveRotationMessage) {
1599 }
else if (haveRotationMessage) {
1610 return qobject_cast<KisMainWindow*>(
d->
mainWindow);
1628 d->
currentImageView->canvasController()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
1629 d->
currentImageView->canvasController()->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
1631 d->
currentImageView->canvasController()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
1632 d->
currentImageView->canvasController()->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
1655 KConfigGroup appAuthorGroup(KSharedConfig::openConfig(),
"Author");
1656 if (profileName.isEmpty() || profileName == i18nc(
"choice for author profile",
"Anonymous")) {
1657 appAuthorGroup.writeEntry(
"active-profile",
"");
1659 appAuthorGroup.writeEntry(
"active-profile", profileName);
1661 appAuthorGroup.sync();
1674 d->
actionAuthor->addAction(i18nc(
"choice for author profile",
"Anonymous"));
1676 KConfigGroup authorGroup(KSharedConfig::openConfig(),
"Author");
1680 QDir dir(authorInfo);
1681 Q_FOREACH(QString entry, dir.entryList(filters)) {
1682 int ln = QString(
".authorinfo").size();
1684 if (!profiles.contains(entry)) {
1685 profiles.append(entry);
1688 Q_FOREACH (
const QString &profile , profiles) {
1692 KConfigGroup appAuthorGroup(KSharedConfig::openConfig(),
"Author");
1693 QString profileName = appAuthorGroup.readEntry(
"active-profile",
"");
1695 if (profileName ==
"anonymous" || profileName.isEmpty()) {
1697 }
else if (profiles.contains(profileName)) {
1717 QSet<KoShape*> dummy;
1784 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 slotImageSizeChanged()
void setFGColor(const KoColor &c)
void setColorHistory(const QList< KoColor > &colors)
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
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())