Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAnimTimelineDockerTitlebar Class Reference

A customized titlebar for the Animation Timeline Docker that's packed with useful widgets and menus. More...

#include <KisAnimTimelineDocker.h>

+ Inheritance diagram for KisAnimTimelineDockerTitlebar:

Public Member Functions

 KisAnimTimelineDockerTitlebar (QWidget *parent=nullptr)
 
- Public Member Functions inherited from KisUtilityTitleBar
void dockWidgetTitleChanged (const QString &title)
 
void featuresChanged (QDockWidget::DockWidgetFeatures features)
 
 KisUtilityTitleBar (QLabel *title, QWidget *parent=nullptr)
 
 KisUtilityTitleBar (QWidget *parent=nullptr)
 
 Private (KisUtilityTitleBar *thePublic)
 
void setWidgetArea (QWidget *widgetArea)
 
QSize sizeHint () const override
 
void toggleFloating ()
 
void topLevelChanged (bool topLevel)
 
void updateButtonSizes ()
 
void updateIcons ()
 
QWidget * widgetArea ()
 
 ~KisUtilityTitleBar ()
 

Public Attributes

QAction * autoKeyBlank
 
QAction * autoKeyDuplicate
 
QToolButton * btnAddKeyframe
 
QToolButton * btnAudioMenu
 
QToolButton * btnAutoKey
 
QToolButton * btnDropFrames
 
QToolButton * btnDuplicateKeyframe
 
QToolButton * btnOnionSkinsMenu
 
QToolButton * btnRemoveKeyframe
 
QToolButton * btnSettingsMenu
 
KisIntParseSpinBoxframeRegister
 
QAction * importAudioAction
 
QAction * muteAudioAction
 
QAction * removeAudioAction
 
KisIntParseSpinBoxsbEndFrame
 
KisIntParseSpinBoxsbFrameRate
 
KisSliderSpinBoxsbSpeed
 
KisIntParseSpinBoxsbStartFrame
 
QString strImportAudio
 
KisTransportControlstransport
 
KisSliderSpinBoxvolumeSlider
 
- Public Attributes inherited from KisUtilityTitleBar
QPushButton * closeButton {nullptr}
 
QDockWidget::DockWidgetFeatures features
 
QPushButton * floatButton {nullptr}
 
QIcon floatIcon
 
QAbstractButton * lockButton {nullptr}
 
bool locked {false}
 
QIcon lockIcon
 
QHBoxLayout * mainLayout
 
QIcon removeIcon
 
KisUtilityTitleBarthePublic {nullptr}
 
KSqueezedTextLabel * titleLabel {nullptr}
 

Private Attributes

const int MAX_FRAMES = 9999
 

Additional Inherited Members

- Public Slots inherited from KisUtilityTitleBar
void setLocked (bool locked)
 
- Protected Attributes inherited from KisUtilityTitleBar
Private *const d
 
const int SPACING_UNIT = 16
 
QHBoxLayout * widgetAreaLayout
 

Detailed Description

A customized titlebar for the Animation Timeline Docker that's packed with useful widgets and menus.

To avoid cluttering the UI, elements that are important to the animator's workflow should be available at a glace, while set-and-forget types of things should be hidden inside of menus.

Definition at line 41 of file KisAnimTimelineDocker.h.

Constructor & Destructor Documentation

◆ KisAnimTimelineDockerTitlebar()

KisAnimTimelineDockerTitlebar::KisAnimTimelineDockerTitlebar ( QWidget * parent = nullptr)

Definition at line 61 of file KisAnimTimelineDocker.cpp.

61 :
62 KisUtilityTitleBar(new QLabel(i18n("Animation Timeline"), parent), parent)
63{
64 setFocusPolicy(Qt::ClickFocus);
65
66 // Transport Controls...
69 widgetAreaLayout->addWidget(transport);
70
71 widgetAreaLayout->addSpacing(SPACING_UNIT);
72
73 // Frame Register...
75 frameRegister->setToolTip(i18n("Frame register"));
76 frameRegister->setPrefix("# ");
77 frameRegister->setRange(0, MAX_FRAMES);
79
80 widgetAreaLayout->addSpacing(SPACING_UNIT);
81
82 { // Drop Frames..
83 btnDropFrames = new QToolButton(this);
84 btnDropFrames->setAutoRaise(true);
86
87 // Playback Speed..
88 sbSpeed = new KisSliderSpinBox(this);
89 sbSpeed->setRange(25, 200);
90 sbSpeed->setSingleStep(5);
91 sbSpeed->setValue(100);
92 sbSpeed->setPrefix(i18nc("preview playback speed percentage prefix", "Speed: "));
93 sbSpeed->setSuffix(" %");
94 sbSpeed->setToolTip(i18n("Preview playback speed"));
95
96 widgetAreaLayout->addWidget(sbSpeed);
97 }
98
99 widgetAreaLayout->addSpacing(SPACING_UNIT);
100
101 { // Frame ops...
102 QWidget *widget = new QWidget(this);
103 QHBoxLayout *layout = new QHBoxLayout(widget);
104 layout->setSpacing(0);
105 layout->setContentsMargins(0,0,0,0);
106
107 btnAddKeyframe = new QToolButton(this);
108 btnAddKeyframe->setAutoRaise(true);
109 layout->addWidget(btnAddKeyframe);
110
111 btnDuplicateKeyframe = new QToolButton(this);
112 btnDuplicateKeyframe->setAutoRaise(true);
113 layout->addWidget(btnDuplicateKeyframe);
114
115 btnRemoveKeyframe = new QToolButton(this);
116 btnRemoveKeyframe->setAutoRaise(true);
117 layout->addWidget(btnRemoveKeyframe);
118
119 widgetAreaLayout->addWidget(widget);
120 }
121
122 widgetAreaLayout->addStretch();
123
124 { // Menus..
125 QWidget *widget = new QWidget(this);
126
127 QHBoxLayout *layout = new QHBoxLayout(widget);
128 layout->setSpacing(0);
129 layout->setContentsMargins(SPACING_UNIT,0,0,0);
130
131 // Onion skins menu.
132 btnOnionSkinsMenu = new QToolButton(this);
133 btnOnionSkinsMenu->setIcon(KisIconUtils::loadIcon("onion_skin_options"));
134 btnOnionSkinsMenu->setToolTip(i18n("Onion skins menu"));
135 btnOnionSkinsMenu->setIconSize(QSize(22, 22));
136 btnOnionSkinsMenu->setAutoRaise(true);
137 layout->addWidget(btnOnionSkinsMenu);
138
139 { // Audio menu..
140 QMenu *audioMenu = new QMenu(this);
141
142 strImportAudio = QString(i18nc("@item:inmenu Load audio file into Krita from disk.", "Import Audio..."));
143 importAudioAction = new QAction(strImportAudio, audioMenu);
144 removeAudioAction = new QAction(i18nc("@item:inmenu", "Remove audio"), audioMenu);
145
146 muteAudioAction = new QAction(i18nc("@item:inmenu Mute audio playback.", "Mute"), audioMenu);
147 muteAudioAction->setCheckable(true);
148
149 volumeSlider = new KisSliderSpinBox(audioMenu);
150 volumeSlider->setRange(0, 100);
153 i18nc("@item:inmenu Volume slider; {n} is the number value, % is the percent sign", "Volume: {n}%"));
154 volumeSlider->setSingleStep(1);
156 volumeSlider->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
157
158 QWidgetAction *volumeAction = new QWidgetAction(audioMenu);
159 volumeAction->setDefaultWidget(volumeSlider);
160
161 audioMenu->addSeparator();
162
163 audioMenu->addAction(importAudioAction);
164 audioMenu->addAction(removeAudioAction);
165
166 audioMenu->addSeparator();
167
168 audioMenu->addAction(volumeAction);
169 audioMenu->addAction(muteAudioAction);
170
171 btnAudioMenu = new QToolButton(this);
172 btnAudioMenu->setIcon(KisIconUtils::loadIcon("audio-none"));
173 btnAudioMenu->setToolTip(i18n("Animation audio menu"));
174 btnAudioMenu->setIconSize(QSize(22, 22));
175 btnAudioMenu->setAutoRaise(true);
176
177 btnAudioMenu->setPopupMode(QToolButton::InstantPopup);
178 btnAudioMenu->setMenu(audioMenu);
179 btnAudioMenu->setEnabled(false); // To be enabled on set canvas...
180
181 layout->addWidget(btnAudioMenu);
182 }
183
184 { // Settings menu..
185 btnSettingsMenu = new QToolButton(this);
186 btnSettingsMenu->setIcon(KisIconUtils::loadIcon("view-choose-22"));
187 btnSettingsMenu->setToolTip(i18n("Animation settings menu"));
188 btnSettingsMenu->setIconSize(QSize(22, 22));
189 btnSettingsMenu->setAutoRaise(true);
190
191 QWidget *settingsMenuWidget = new QWidget(this);
192 QHBoxLayout *settingsMenuLayout = new QHBoxLayout(settingsMenuWidget);
193
194 QWidget *fields = new QWidget(settingsMenuWidget);
195 QFormLayout *fieldsLayout = new QFormLayout(fields);
196
197 sbStartFrame = new KisIntParseSpinBox(settingsMenuWidget);
198 sbStartFrame->setMaximum(10000);
199 fieldsLayout->addRow(i18n("Clip Start: "), sbStartFrame);
200
201 sbEndFrame = new KisIntParseSpinBox(settingsMenuWidget);
202 sbEndFrame->setMaximum(10000);
203 fieldsLayout->addRow(i18n("Clip End: "), sbEndFrame);
204
205 sbFrameRate = new KisIntParseSpinBox(settingsMenuWidget);
206 sbFrameRate->setMinimum(0);
207 sbFrameRate->setMaximum(120);
208 fieldsLayout->addRow(i18n("Frame Rate: "), sbFrameRate);
209
210 QWidget *buttons = new QWidget(settingsMenuWidget);
211 QVBoxLayout *buttonsLayout = new QVBoxLayout(buttons);
212 buttonsLayout->setAlignment(Qt::AlignTop);
213
214 { // AutoKey..
215 // AutoKey Actions & Action Group..
216 autoKeyBlank = new QAction(i18n("AutoKey Blank"), this);
217 autoKeyBlank->setCheckable(true);
218 autoKeyDuplicate = new QAction(i18n("AutoKey Duplicate"), this);
219 autoKeyDuplicate->setCheckable(true);
220 QActionGroup *autoKeyModes = new QActionGroup(this);
221 autoKeyModes->addAction(autoKeyBlank);
222 autoKeyModes->addAction(autoKeyDuplicate);
223 autoKeyModes->setExclusive(true);
224
225 connect(autoKeyModes, &QActionGroup::triggered, this, [this](QAction* modeAction){
226 if (!modeAction) return;
227 {
228 KisImageConfig imageCfg(false);
229 if (modeAction == autoKeyBlank) {
230 imageCfg.setAutoKeyModeDuplicate(false);
231 } else if (modeAction == autoKeyDuplicate) {
232 imageCfg.setAutoKeyModeDuplicate(true);
233 }
234 }
236 });
237
238 // AutoKey Mode Menu..
239 QMenu *autoKeyModeMenu = new QMenu(settingsMenuWidget);
240 autoKeyModeMenu->addActions(autoKeyModes->actions());
241
242 // AutoKey Button..
243 btnAutoKey = new QToolButton(settingsMenuWidget);
244 btnAutoKey->setMenu(autoKeyModeMenu);
245 btnAutoKey->setPopupMode(QToolButton::MenuButtonPopup);
246 buttonsLayout->addWidget(btnAutoKey);
247 }
248
249 settingsMenuLayout->addWidget(fields);
250 settingsMenuLayout->addWidget(buttons);
251
252 layout->addWidget(btnSettingsMenu);
253
254 QMenu *settingsPopMenu = new QMenu(this);
255 QWidgetAction *settingsMenuAction = new QWidgetAction(this);
256 settingsMenuAction->setDefaultWidget(settingsMenuWidget);
257 settingsPopMenu->addAction(settingsMenuAction);
258
259 btnSettingsMenu->setPopupMode(QToolButton::InstantPopup);
260 btnSettingsMenu->setMenu(settingsPopMenu);
261 }
262
263 widgetAreaLayout->addWidget(widget);
264 }
265}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
static KisImageConfigNotifier * instance()
The KisIntParseSpinBox class is a cleverer SpinBox, able to parse arithmetic expressions.
This class is a spinbox in which you can click and drag to set the value. A slider like bar is displa...
void setValue(int newValue)
void setRange(int newMinimum, int newMaximum, bool computeNewFastSliderStep=true)
Set the minimum and the maximum values of the range, computing a new "fast slider step" based on the ...
void setPageStep(int newPageStep)
Does nothing currently.
The KisTransportControls class provides a simple, reusable widget for common transport controls,...
KisUtilityTitleBar(QWidget *parent=nullptr)
QString buttons(const T &ev)
QIcon loadIcon(const QString &name)
void setText(QSpinBox *spinBox, const QStringView textTemplate)

References autoKeyBlank, autoKeyDuplicate, btnAddKeyframe, btnAudioMenu, btnAutoKey, btnDropFrames, btnDuplicateKeyframe, btnOnionSkinsMenu, btnRemoveKeyframe, btnSettingsMenu, buttons(), connect(), frameRegister, importAudioAction, KisImageConfigNotifier::instance(), KisIconUtils::loadIcon(), MAX_FRAMES, muteAudioAction, KisImageConfigNotifier::notifyAutoKeyFrameConfigurationChanged(), removeAudioAction, sbEndFrame, sbFrameRate, sbSpeed, sbStartFrame, KisImageConfig::setAutoKeyModeDuplicate(), KisSliderSpinBox::setPageStep(), KisSliderSpinBox::setRange(), KisSpinBoxI18nHelper::setText(), KisSliderSpinBox::setValue(), KisTransportControls::showSkipButtons(), KisUtilityTitleBar::SPACING_UNIT, strImportAudio, transport, volumeSlider, and KisUtilityTitleBar::widgetAreaLayout.

Member Data Documentation

◆ autoKeyBlank

QAction* KisAnimTimelineDockerTitlebar::autoKeyBlank

Definition at line 74 of file KisAnimTimelineDocker.h.

◆ autoKeyDuplicate

QAction* KisAnimTimelineDockerTitlebar::autoKeyDuplicate

Definition at line 75 of file KisAnimTimelineDocker.h.

◆ btnAddKeyframe

QToolButton* KisAnimTimelineDockerTitlebar::btnAddKeyframe

Definition at line 52 of file KisAnimTimelineDocker.h.

◆ btnAudioMenu

QToolButton* KisAnimTimelineDockerTitlebar::btnAudioMenu

Definition at line 57 of file KisAnimTimelineDocker.h.

◆ btnAutoKey

QToolButton* KisAnimTimelineDockerTitlebar::btnAutoKey

Definition at line 73 of file KisAnimTimelineDocker.h.

◆ btnDropFrames

QToolButton* KisAnimTimelineDockerTitlebar::btnDropFrames

Definition at line 71 of file KisAnimTimelineDocker.h.

◆ btnDuplicateKeyframe

QToolButton* KisAnimTimelineDockerTitlebar::btnDuplicateKeyframe

Definition at line 53 of file KisAnimTimelineDocker.h.

◆ btnOnionSkinsMenu

QToolButton* KisAnimTimelineDockerTitlebar::btnOnionSkinsMenu

Definition at line 56 of file KisAnimTimelineDocker.h.

◆ btnRemoveKeyframe

QToolButton* KisAnimTimelineDockerTitlebar::btnRemoveKeyframe

Definition at line 54 of file KisAnimTimelineDocker.h.

◆ btnSettingsMenu

QToolButton* KisAnimTimelineDockerTitlebar::btnSettingsMenu

Definition at line 58 of file KisAnimTimelineDocker.h.

◆ frameRegister

KisIntParseSpinBox* KisAnimTimelineDockerTitlebar::frameRegister

Definition at line 50 of file KisAnimTimelineDocker.h.

◆ importAudioAction

QAction* KisAnimTimelineDockerTitlebar::importAudioAction

Definition at line 61 of file KisAnimTimelineDocker.h.

◆ MAX_FRAMES

const int KisAnimTimelineDockerTitlebar::MAX_FRAMES = 9999
private

Definition at line 78 of file KisAnimTimelineDocker.h.

◆ muteAudioAction

QAction* KisAnimTimelineDockerTitlebar::muteAudioAction

Definition at line 63 of file KisAnimTimelineDocker.h.

◆ removeAudioAction

QAction* KisAnimTimelineDockerTitlebar::removeAudioAction

Definition at line 62 of file KisAnimTimelineDocker.h.

◆ sbEndFrame

KisIntParseSpinBox* KisAnimTimelineDockerTitlebar::sbEndFrame

Definition at line 67 of file KisAnimTimelineDocker.h.

◆ sbFrameRate

KisIntParseSpinBox* KisAnimTimelineDockerTitlebar::sbFrameRate

Definition at line 68 of file KisAnimTimelineDocker.h.

◆ sbSpeed

KisSliderSpinBox* KisAnimTimelineDockerTitlebar::sbSpeed

Definition at line 69 of file KisAnimTimelineDocker.h.

◆ sbStartFrame

KisIntParseSpinBox* KisAnimTimelineDockerTitlebar::sbStartFrame

Definition at line 66 of file KisAnimTimelineDocker.h.

◆ strImportAudio

QString KisAnimTimelineDockerTitlebar::strImportAudio

Definition at line 60 of file KisAnimTimelineDocker.h.

◆ transport

KisTransportControls* KisAnimTimelineDockerTitlebar::transport

Definition at line 48 of file KisAnimTimelineDocker.h.

◆ volumeSlider

KisSliderSpinBox* KisAnimTimelineDockerTitlebar::volumeSlider

Definition at line 64 of file KisAnimTimelineDocker.h.


The documentation for this class was generated from the following files: