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)) {
284 d->
mainWindow =
dynamic_cast<QMainWindow*
>(parent);
347 KoColor foreground(Qt::black, cs);
349 KoColor background(Qt::white, cs);
410 KSharedConfigPtr config = KSharedConfig::openConfig();
411 KConfigGroup miscGroup = config->group(
"Misc");
412 const uint handleRadius = miscGroup.readEntry(
"HandleRadius", 5);
455 doc->disconnect(
this);
470 d->
softProof->setChecked(imageView->softProofing());
471 d->
gamutCheck->setChecked(imageView->gamutCheck());
476 if (
KisConfig(
true).readEntry<bool>(
"EnablePositionLabel",
false)) {
478 SIGNAL(documentMousePositionChanged(QPointF)),
480 SLOT(documentMousePositionChanged(QPointF)));
520 QSignalBlocker b(d->viewPrintSize);
521 d->viewPrintSize->setChecked(value);
523 d->
viewPrintSize->setChecked(imageView->canvasController()->usePrintResolutionMode());
529 imageView->zoomManager()->zoomAction(),
531 imageView->zoomManager()->zoomAction()->setUsePrintResolutionMode(imageView->canvasController()->usePrintResolutionMode());
534 imageView->canvasController(),
570 image(), SIGNAL(sigSizeChanged(QPointF,QPointF)),
574 image(), SIGNAL(sigResolutionChanged(
double,
double)),
774 connect(tAction, SIGNAL(toggled(
bool)),
this, SLOT(
showStatusBar(
bool)));
777 tAction->setChecked(
false);
778 tAction->setAutoRepeat(
false);
779 connect(tAction, SIGNAL(toggled(
bool)),
this, SLOT(
switchCanvasOnly(
bool)));
892 const int busyWaitDelay = 1000;
894 dialog.blockIfImageIsBusy();
896 return dialog.result() == QDialog::Accepted;
925 KisImageReadOnlyBarrierLock l(srcDoc->
image());
926 doc = srcDoc->
clone(
true);
931 if (name.isEmpty()) {
934 name = i18n(
"%1 (Copy)", name);
950 QMainWindow* w = qobject_cast<QMainWindow*>(qApp->activeWindow());
971 QString path = QFileInfo(
document()->localFilePath()).canonicalPath();
974 if (QDir(path).exists()) {
978 dialog.setDirectoryUrl(QUrl(
document()->localFilePath()));
979 return dialog.filename();
982 return QFileInfo(
document()->localFilePath()).canonicalPath();
997 bool fileAlreadyExists;
999 QString version =
"000";
1004 QString fileName = QFileInfo(
document()->localFilePath()).fileName();
1009 QRegularExpression regex(
"_(\\d{1,4})([a-z])?([\\.|~])");
1010 QRegularExpressionMatch match;
1011 foundVersion = fileName.contains(regex, &match);
1012 isBackup = foundVersion ? match.captured(3) ==
"~" :
false;
1016 version = match.captured(1);
1017 letter = match.captured(2);
1020 QRegularExpression regex2(
"\\.\\w{2,4}$");
1021 QRegularExpressionMatch match = regex2.match(fileName);
1022 QString extensionPlusVersion = match.captured(0);
1023 extensionPlusVersion.prepend(version);
1024 extensionPlusVersion.prepend(
"_");
1025 fileName.replace(regex2, extensionPlusVersion);
1029 int intVersion = version.toInt(0);
1031 QString baseNewVersion = QString::number(intVersion);
1032 while (baseNewVersion.length() < version.length()) {
1033 baseNewVersion.prepend(
"0");
1038 newVersion = baseNewVersion;
1039 newVersion.prepend(
"_");
1040 if (!letter.isNull()) newVersion.append(letter);
1042 newVersion.append(
"~");
1044 newVersion.append(
".");
1046 fileName.replace(regex, newVersion);
1047 fileAlreadyExists = QFileInfo(path +
'/' + fileName).exists();
1048 if (fileAlreadyExists) {
1049 if (!letter.isNull()) {
1050 char letterCh = letter.at(0).toLatin1();
1052 letter = QString(QChar(letterCh));
1057 }
while (fileAlreadyExists && letter !=
"{");
1059 if (letter ==
"{") {
1060 QMessageBox::critical(
mainWindow(), i18nc(
"@title:window",
"Couldn't save incremental version"), i18n(
"Alternative names exhausted, try manually saving with a higher number"));
1063 QString newFilePath = path +
'/' + fileName;
1068 QUrl::fromLocalFile(
document()->path()));
1075 if (
document()->path().isEmpty()) {
1081 bool workingOnBackup;
1082 bool fileAlreadyExists;
1083 QString version =
"000";
1087 QString fileName = QFileInfo(
document()->localFilePath()).fileName();
1090 QRegularExpression regex(
"~(\\d{1,4})([a-z])?\\.");
1091 QRegularExpressionMatch match;
1092 workingOnBackup = fileName.contains(regex, &match);
1094 if (workingOnBackup) {
1096 version = match.captured(1);
1097 letter = match.captured(2);
1100 int intVersion = version.toInt(0);
1102 QString baseNewVersion = QString::number(intVersion);
1104 while (baseNewVersion.length() < version.length()) {
1105 baseNewVersion.prepend(
"0");
1110 newVersion = baseNewVersion;
1111 newVersion.prepend(
"~");
1112 if (!letter.isNull()) newVersion.append(letter);
1113 newVersion.append(
".");
1114 backupFileName.replace(regex, newVersion);
1115 fileAlreadyExists = QFile(path +
'/' + backupFileName).exists();
1116 if (fileAlreadyExists) {
1117 if (!letter.isNull()) {
1118 char letterCh = letter.at(0).toLatin1();
1120 letter = QString(QChar(letterCh));
1125 }
while (fileAlreadyExists && letter !=
"{");
1127 if (letter ==
"{") {
1128 QMessageBox::critical(
mainWindow(), i18nc(
"@title:window",
"Couldn't save incremental backup"), i18n(
"Alternative names exhausted, try manually saving with a higher number"));
1131 QFile::copy(path +
'/' + fileName, path +
'/' + backupFileName);
1136 const quint8 HARDCODED_DIGIT_COUNT = 3;
1137 QString baseNewVersion =
"000";
1138 QString backupFileName = QFileInfo(
document()->localFilePath()).fileName();
1139 QRegularExpression regex2(
"\\.\\w{2,4}$");
1140 QRegularExpressionMatch match = regex2.match(fileName);
1141 QString extensionPlusVersion = match.captured(0);
1142 extensionPlusVersion.prepend(baseNewVersion);
1143 extensionPlusVersion.prepend(
"~");
1144 backupFileName.replace(regex2, extensionPlusVersion);
1148 newVersion = baseNewVersion;
1149 newVersion.prepend(
"~");
1150 newVersion.append(
".");
1151 backupFileName.replace(regex, newVersion);
1152 fileAlreadyExists = QFile(path +
'/' + backupFileName).exists();
1153 if (fileAlreadyExists) {
1155 int intVersion = baseNewVersion.toInt(0);
1157 baseNewVersion = QString::number(intVersion);
1158 while (baseNewVersion.length() < HARDCODED_DIGIT_COUNT) {
1159 baseNewVersion.prepend(
"0");
1162 }
while (fileAlreadyExists);
1166 QFile::copy(path +
'/' + fileName, path +
'/' + backupFileName);
1195 if(mw && mw->statusBar()) {
1196 mw->statusBar()->setVisible(toggled);
1220 dbgUI <<
"Unable to switch to canvas-only mode, main window not found";
1234 bool wasToolBarPopupOpen =
false;
1235 for (QToolBar *toolBar : toolBars) {
1236 for (QToolButton *
button : toolBar->findChildren<QToolButton *>(QStringLiteral(
"qt_toolbar_ext_button"))) {
1237 if (
button->isChecked()) {
1238 wasToolBarPopupOpen =
true;
1244 if(wasToolBarPopupOpen) {
1267 !
main->canvasDetached();
1269 if (useCanvasOffsetCompensation) {
1302 if (toggleFullscreen) {
1304 origin =
main->geometry().topLeft() -
main->screen()->geometry().topLeft();
1314 if (
main->statusBar()) {
1316 if (
main->statusBar()->dynamicPropertyNames().contains(
"wasvisible")) {
1317 if (
main->statusBar()->property(
"wasvisible").toBool()) {
1318 main->statusBar()->setVisible(
true);
1323 main->statusBar()->setProperty(
"wasvisible",
main->statusBar()->isVisible());
1324 main->statusBar()->setVisible(
false);
1330 KisAction* action = qobject_cast<KisAction*>(
main->actionCollection()->action(
"view_toggledockers"));
1332 action->setCheckable(
true);
1334 if (action->isChecked()) {
1336 action->setChecked(
false);
1348 if (toggleFullscreen) {
1350 main->setWindowState(
main->windowState() | Qt::WindowFullScreen);
1352 main->setWindowState(
main->windowState() & ~Qt::WindowFullScreen);
1358 if (
main->menuBar()->dynamicPropertyNames().contains(
"wasvisible")) {
1359 if (
main->menuBar()->property(
"wasvisible").toBool()) {
1360 main->menuBar()->setVisible(
true);
1365 main->menuBar()->setProperty(
"wasvisible",
main->menuBar()->isVisible());
1366 main->menuBar()->setVisible(
false);
1375 Q_FOREACH (QToolBar* toolbar, toolBars) {
1377 if (toolbar->dynamicPropertyNames().contains(
"wasvisible")) {
1378 if (toolbar->property(
"wasvisible").toBool()) {
1379 toolbar->setVisible(
true);
1384 toolbar->setProperty(
"wasvisible", toolbar->isVisible());
1385 toolbar->setVisible(
false);
1406 QTimer::singleShot(0,
this, [
this] () {
1413 actionCollection()->action(
"view_show_canvas_only")->shortcut().toString(QKeySequence::NativeText)), QIcon(),
1423 if (useCanvasOffsetCompensation && toggled) {
1426 const bool allowedZoomMode =
1430 if (allowedZoomMode) {
1432 QTimer::singleShot(0,
this, [
this] () {
1448 QSignalBlocker blocker(action);
1463 QString folderInStandardAppData;
1464 QString folderInPrivateAppData;
1467 if (!folderInPrivateAppData.isEmpty()) {
1469 const auto pathToDisplay = [](
const QString &path) {
1477 return QDir::toNativeSeparators(path).replace(QChar(
'\\'), QStringLiteral(
u"\\\u200B"));
1480 QMessageBox mbox(qApp->activeWindow());
1481 mbox.setIcon(QMessageBox::Information);
1482 mbox.setWindowTitle(i18nc(
"@title:window resource folder",
"Open Resource Folder"));
1485 mbox.setText(i18nc(
"@info resource folder",
1486 "<p>You are using the Microsoft Store package version of Krita. "
1487 "Even though Krita can be configured to place resources under the "
1488 "user AppData location, Windows may actually store the files "
1489 "inside a private app location.</p>\n"
1490 "<p>You should check both locations to determine where "
1491 "the files are located.</p>\n"
1492 "<p><b>User AppData</b>:<br/>\n"
1494 "<p><b>Private app location</b>:<br/>\n"
1496 pathToDisplay(folderInStandardAppData),
1497 pathToDisplay(folderInPrivateAppData)
1499 mbox.setTextInteractionFlags(Qt::NoTextInteraction);
1501 const auto *btnOpenUserAppData = mbox.addButton(i18nc(
"@action:button resource folder",
"Open in &user AppData"), QMessageBox::AcceptRole);
1502 const auto *btnOpenPrivateAppData = mbox.addButton(i18nc(
"@action:button resource folder",
"Open in &private app location"), QMessageBox::AcceptRole);
1504 mbox.addButton(QMessageBox::Close);
1505 mbox.setDefaultButton(QMessageBox::Close);
1508 if (mbox.clickedButton() == btnOpenPrivateAppData) {
1509 resourcePath = folderInPrivateAppData;
1510 }
else if (mbox.clickedButton() == btnOpenUserAppData) {
1519 QDesktopServices::openUrl(QUrl::fromLocalFile(resourcePath));
1526 Q_FOREACH (QDockWidget* dock, dockers) {
1531 if (qobject_cast<KoToolDocker*>(dock)) {
1535 QObjectList objects;
1536 objects.append(dock);
1537 while (!objects.isEmpty()) {
1538 QObject*
object = objects.takeFirst();
1539 objects.append(object->children());
1558 d->
currentImageView->showFloatingMessage(message, icon, timeout, priority, alignment);
1577 int timeoutMsec = 500;
1580 messageToClear.clear();
1587 if (haveZoomMessage) {
1588 if (haveRotationMessage) {
1593 }
else if (haveRotationMessage) {
1604 return qobject_cast<KisMainWindow*>(
d->
mainWindow);
1622 d->
currentImageView->canvasController()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
1623 d->
currentImageView->canvasController()->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
1625 d->
currentImageView->canvasController()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
1626 d->
currentImageView->canvasController()->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
1649 KConfigGroup appAuthorGroup(KSharedConfig::openConfig(),
"Author");
1650 if (profileName.isEmpty() || profileName == i18nc(
"choice for author profile",
"Anonymous")) {
1651 appAuthorGroup.writeEntry(
"active-profile",
"");
1653 appAuthorGroup.writeEntry(
"active-profile", profileName);
1655 appAuthorGroup.sync();
1668 d->
actionAuthor->addAction(i18nc(
"choice for author profile",
"Anonymous"));
1670 KConfigGroup authorGroup(KSharedConfig::openConfig(),
"Author");
1674 QDir dir(authorInfo);
1675 Q_FOREACH(QString entry, dir.entryList(filters)) {
1676 int ln = QString(
".authorinfo").size();
1678 if (!profiles.contains(entry)) {
1679 profiles.append(entry);
1682 Q_FOREACH (
const QString &profile , profiles) {
1686 KConfigGroup appAuthorGroup(KSharedConfig::openConfig(),
"Author");
1687 QString profileName = appAuthorGroup.readEntry(
"active-profile",
"");
1689 if (profileName ==
"anonymous" || profileName.isEmpty()) {
1691 }
else if (profiles.contains(profileName)) {
1711 QSet<KoShape*> dummy;
1771 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())