From 917f72486123f1bacd59a40612dcd301c10451ce Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 9 Jan 2012 21:18:32 -0300 Subject: [PATCH] Add text entry to go to frame in the status bar (issue #6). + Added a button to create new frames in the status bar. --- data/skins/default/sheet.png | Bin 9863 -> 9980 bytes data/skins/default/skin.xml | 2 ++ src/skin/skin_parts.h | 18 ++++++++++ src/skin/skin_theme.cpp | 12 +++++-- src/widgets/statebar.cpp | 68 ++++++++++++++++++++++++++++++++++- src/widgets/statebar.h | 17 +++++---- 6 files changed, 108 insertions(+), 9 deletions(-) diff --git a/data/skins/default/sheet.png b/data/skins/default/sheet.png index f7efa1f539cfde0a669314c9f91e45103fc7a9d3..f56045fe016e52590651265943fc5d717d811658 100644 GIT binary patch literal 9980 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 literal 9863 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 W{$o(*AP4G#8K9z|4y%$g3;jPRbGO6* diff --git a/data/skins/default/skin.xml b/data/skins/default/skin.xml index 13cb38f0f..e78bb87d2 100644 --- a/data/skins/default/skin.xml +++ b/data/skins/default/skin.xml @@ -83,6 +83,8 @@ + + diff --git a/src/skin/skin_parts.h b/src/skin/skin_parts.h index 3925efe77..605d8bb1b 100644 --- a/src/skin/skin_parts.h +++ b/src/skin/skin_parts.h @@ -120,6 +120,24 @@ enum { PART_SUNKEN2_FOCUSED_SW, PART_SUNKEN2_FOCUSED_W, + PART_SUNKEN_MINI_NORMAL_NW, + PART_SUNKEN_MINI_NORMAL_N, + PART_SUNKEN_MINI_NORMAL_NE, + PART_SUNKEN_MINI_NORMAL_E, + PART_SUNKEN_MINI_NORMAL_SE, + PART_SUNKEN_MINI_NORMAL_S, + PART_SUNKEN_MINI_NORMAL_SW, + PART_SUNKEN_MINI_NORMAL_W, + + PART_SUNKEN_MINI_FOCUSED_NW, + PART_SUNKEN_MINI_FOCUSED_N, + PART_SUNKEN_MINI_FOCUSED_NE, + PART_SUNKEN_MINI_FOCUSED_E, + PART_SUNKEN_MINI_FOCUSED_SE, + PART_SUNKEN_MINI_FOCUSED_S, + PART_SUNKEN_MINI_FOCUSED_SW, + PART_SUNKEN_MINI_FOCUSED_W, + PART_WINDOW_NW, PART_WINDOW_N, PART_WINDOW_NE, diff --git a/src/skin/skin_theme.cpp b/src/skin/skin_theme.cpp index 75dabfb48..3802f8f6d 100644 --- a/src/skin/skin_theme.cpp +++ b/src/skin/skin_theme.cpp @@ -113,6 +113,8 @@ SkinTheme::SkinTheme() sheet_mapping["sunken_focused"] = PART_SUNKEN_FOCUSED_NW; sheet_mapping["sunken2_normal"] = PART_SUNKEN2_NORMAL_NW; sheet_mapping["sunken2_focused"] = PART_SUNKEN2_FOCUSED_NW; + sheet_mapping["sunken_mini_normal"] = PART_SUNKEN_MINI_NORMAL_NW; + sheet_mapping["sunken_mini_focused"] = PART_SUNKEN_MINI_FOCUSED_NW; sheet_mapping["window"] = PART_WINDOW_NW; sheet_mapping["menu"] = PART_MENU_NW; sheet_mapping["window_close_button_normal"] = PART_WINDOW_CLOSE_BUTTON_NORMAL; @@ -892,10 +894,16 @@ void SkinTheme::paintEntry(PaintEvent& ev) bg = COLOR_BACKGROUND; + bool isMiniLook = false; + SharedPtr skinPropery = widget->getProperty(SkinProperty::SkinPropertyName); + if (skinPropery != NULL) + isMiniLook = (skinPropery->getLook() == MiniLook); + draw_bounds_nw(ji_screen, x1, y1, x2, y2, - widget->hasFocus() ? PART_SUNKEN_FOCUSED_NW: - PART_SUNKEN_NORMAL_NW, bg); + (widget->hasFocus() ? + (isMiniLook ? PART_SUNKEN_MINI_FOCUSED_NW: PART_SUNKEN_FOCUSED_NW): + (isMiniLook ? PART_SUNKEN_MINI_NORMAL_NW : PART_SUNKEN_NORMAL_NW)), bg); /* draw the text */ x = widget->rc->x1 + widget->border_width.l; diff --git a/src/widgets/statebar.cpp b/src/widgets/statebar.cpp index ca97d449f..dde4421be 100644 --- a/src/widgets/statebar.cpp +++ b/src/widgets/statebar.cpp @@ -71,6 +71,42 @@ static int statusbar_type() return type; } +// This widget is used to show the current frame. +class GotoFrameEntry : public Entry { +public: + GotoFrameEntry() : Entry(4, "") { + } + + bool onProcessMessage(Message* msg) OVERRIDE { + switch (msg->type) { + // When the mouse enter in this entry, it got the focus and the + // text is automatically selected. + case JM_MOUSEENTER: + requestFocus(); + selectText(0, -1); + break; + + case JM_KEYPRESSED: + if (msg->key.scancode == KEY_ENTER || + msg->key.scancode == KEY_ENTER_PAD) { + Command* cmd = CommandsModule::instance()->getCommandByName(CommandId::GotoFrame); + Params params; + int frame = strtol(this->getText(), NULL, 10); + if (frame > 0) { + params.set("frame", this->getText()); + UIContext::instance()->executeCommand(cmd, ¶ms); + } + // Select the text again + selectText(0, -1); + return true; // Key used. + } + break; + } + return Entry::onProcessMessage(msg); + } + +}; + StatusBar::StatusBar() : Widget(statusbar_type()) , m_color(Color::fromMask()) @@ -106,9 +142,15 @@ StatusBar::StatusBar() Box* box1 = new Box(JI_HORIZONTAL); Box* box2 = new Box(JI_HORIZONTAL | JI_HOMOGENEOUS); Box* box3 = new Box(JI_HORIZONTAL); + Box* box4 = new Box(JI_HORIZONTAL); m_slider = new Slider(0, 255, 255); + m_currentFrame = new GotoFrameEntry(); + m_newFrame = new Button("+"); + m_newFrame->Click.connect(Bind(&StatusBar::newFrame, this)); setup_mini_look(m_slider); + setup_mini_look(m_currentFrame); + setup_mini_look(m_newFrame); ICON_NEW(m_b_first, PART_ANI_FIRST, ACTION_FIRST); ICON_NEW(m_b_prev, PART_ANI_PREVIOUS, ACTION_PREV); @@ -124,6 +166,9 @@ StatusBar::StatusBar() jwidget_noborders(box3); jwidget_expansive(box3, true); + box4->addChild(m_currentFrame); + box4->addChild(m_newFrame); + box2->addChild(m_b_first); box2->addChild(m_b_prev); box2->addChild(m_b_play); @@ -131,6 +176,7 @@ StatusBar::StatusBar() box2->addChild(m_b_last); box1->addChild(box3); + box1->addChild(box4); box1->addChild(box2); box1->addChild(m_slider); @@ -219,6 +265,9 @@ void StatusBar::clearText() bool StatusBar::setStatusText(int msecs, const char *format, ...) { + // TODO this call should be in a listener of the "current frame" property changes. + updateCurrentFrame(); + if ((ji_clock > m_timeout) || (msecs > 0)) { char buf[256]; // TODO warning buffer overflow va_list ap; @@ -606,10 +655,13 @@ bool StatusBar::onProcessMessage(Message* msg) } case JM_MOUSEENTER: { - bool state = (UIContext::instance()->getActiveDocument() != NULL); + const Document* document = UIContext::instance()->getActiveDocument(); + bool state = (document != NULL); if (!hasChild(m_movePixelsBox)) { if (state && !hasChild(m_commandsBox)) { + updateCurrentFrame(); + m_b_first->setEnabled(state); m_b_prev->setEnabled(state); m_b_play->setEnabled(state); @@ -830,3 +882,17 @@ void StatusBar::updateFromLayer() m_slider->setEnabled(false); } } + +void StatusBar::updateCurrentFrame() +{ + const Document* document = UIContext::instance()->getActiveDocument(); + if (document) + m_currentFrame->setTextf("%d", document->getSprite()->getCurrentFrame()+1); +} + +void StatusBar::newFrame() +{ + Command* cmd = CommandsModule::instance()->getCommandByName(CommandId::NewFrame); + UIContext::instance()->executeCommand(cmd); + updateCurrentFrame(); +} diff --git a/src/widgets/statebar.h b/src/widgets/statebar.h index 6b7e80738..bff86737f 100644 --- a/src/widgets/statebar.h +++ b/src/widgets/statebar.h @@ -32,6 +32,7 @@ class Box; class Button; class ColorButton; +class Entry; class Frame; class Slider; class StatusBar; @@ -99,6 +100,8 @@ private: void onCurrentToolChange(); void onTransparentColorChange(); void updateFromLayer(); + void updateCurrentFrame(); + void newFrame(); enum State { SHOW_TEXT, SHOW_COLOR, SHOW_TOOL }; @@ -119,12 +122,14 @@ private: // Box of main commands Widget* m_commandsBox; - Slider* m_slider; // Opacity slider - Button* m_b_first; // Go to first frame - Button* m_b_prev; // Go to previous frame - Button* m_b_play; // Play animation - Button* m_b_next; // Go to next frame - Button* m_b_last; // Go to last frame + Slider* m_slider; // Opacity slider + Entry* m_currentFrame; // Current frame and go to frame entry + Button* m_newFrame; // Button to create a new frame + Button* m_b_first; // Go to first frame + Button* m_b_prev; // Go to previous frame + Button* m_b_play; // Play animation + Button* m_b_next; // Go to next frame + Button* m_b_last; // Go to last frame // Box of notifications. Widget* m_notificationsBox;