diff options
author | Andrei Karas <akaras@inbox.ru> | 2013-09-30 14:03:48 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2013-09-30 14:03:48 +0300 |
commit | 25d77892d72d455f8a89372687db45aefbc61cec (patch) | |
tree | de03cb1af09eebf6db853a6585b953884bcca3b2 /src/gui/windows/shortcutwindow.cpp | |
parent | 05c22dd1a69fe90da67188c74a6995ee3747e937 (diff) | |
download | manaplus-25d77892d72d455f8a89372687db45aefbc61cec.tar.gz manaplus-25d77892d72d455f8a89372687db45aefbc61cec.tar.bz2 manaplus-25d77892d72d455f8a89372687db45aefbc61cec.tar.xz manaplus-25d77892d72d455f8a89372687db45aefbc61cec.zip |
move windows classes to windows directory.
Diffstat (limited to 'src/gui/windows/shortcutwindow.cpp')
-rw-r--r-- | src/gui/windows/shortcutwindow.cpp | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/src/gui/windows/shortcutwindow.cpp b/src/gui/windows/shortcutwindow.cpp new file mode 100644 index 000000000..1ae74efb3 --- /dev/null +++ b/src/gui/windows/shortcutwindow.cpp @@ -0,0 +1,242 @@ +/* + * The ManaPlus Client + * Copyright (C) 2007-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2013 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "gui/windows/shortcutwindow.h" + +#include "gui/windows/setup.h" + +#include "gui/widgets/layout.h" +#include "gui/widgets/scrollarea.h" +#include "gui/widgets/shortcutcontainer.h" +#include "gui/widgets/tab.h" + +#include "debug.h" + +static const int SCROLL_PADDING = 0; + +int ShortcutWindow::mBoxesWidth = 0; + +class ShortcutTab final : public Tab +{ + public: + ShortcutTab(const Widget2 *const widget, + std::string name, ShortcutContainer *const content) : + Tab(widget), + mContent(content) + { + setCaption(name); + } + + A_DELETE_COPY(ShortcutTab) + + ShortcutContainer* mContent; +}; + +ShortcutWindow::ShortcutWindow(const std::string &title, + ShortcutContainer *const content, + const std::string &skinFile, + int width, int height) : + Window("Window", false, nullptr, skinFile), + mItems(content), + mScrollArea(new ScrollArea(mItems, false)), + mTabs(nullptr), + mPages() +{ + setWindowName(title); + setTitleBarHeight(getPadding() + getTitlePadding()); + + setShowTitle(false); + setResizable(true); + setDefaultVisible(false); + setSaveVisible(true); + + mDragOffsetX = 0; + mDragOffsetY = 0; + + content->setWidget2(this); + if (setupWindow) + setupWindow->registerWindowForReset(this); + + const int border = SCROLL_PADDING * 2 + getPadding() * 2; + setMinWidth(mItems->getBoxWidth() + border); + setMinHeight(mItems->getBoxHeight() + border); + setMaxWidth(mItems->getBoxWidth() * mItems->getMaxItems() + border); + setMaxHeight(mItems->getBoxHeight() * mItems->getMaxItems() + border); + + if (width == 0) + width = mItems->getBoxWidth() + border; + if (height == 0) + height = (mItems->getBoxHeight() * mItems->getMaxItems()) + border; + + setDefaultSize(width, height, ImageRect::LOWER_RIGHT); + + mBoxesWidth += mItems->getBoxWidth() + border; + + mScrollArea->setPosition(SCROLL_PADDING, SCROLL_PADDING); + mScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER); + + place(0, 0, mScrollArea, 5, 5).setPadding(0); + + Layout &layout = getLayout(); + layout.setRowHeight(0, Layout::AUTO_SET); + layout.setMargin(0); + + loadWindowState(); + enableVisibleSound(true); +} + +ShortcutWindow::ShortcutWindow(const std::string &title, + const std::string &skinFile, + const int width, const int height) : + Window("Window", false, nullptr, skinFile), + mItems(nullptr), + mScrollArea(nullptr), + mTabs(new TabbedArea(this)), + mPages() +{ + setWindowName(title); + setTitleBarHeight(getPadding() + getTitlePadding()); + setShowTitle(false); + setResizable(true); + setDefaultVisible(false); + setSaveVisible(true); + + mDragOffsetX = 0; + mDragOffsetY = 0; + + if (setupWindow) + setupWindow->registerWindowForReset(this); + + const int border = SCROLL_PADDING * 2 + getPadding() * 2; + + if (width && height) + setDefaultSize(width, height, ImageRect::LOWER_RIGHT); + + setMinWidth(32 + border); + setMinHeight(32 + border); + + place(0, 0, mTabs, 5, 5); + + Layout &layout = getLayout(); + layout.setRowHeight(0, Layout::AUTO_SET); + layout.setMargin(0); + + loadWindowState(); + enableVisibleSound(true); +} + +ShortcutWindow::~ShortcutWindow() +{ + if (mTabs) + mTabs->removeAll(); + delete mTabs; + mTabs = nullptr; + delete mItems; + mItems = nullptr; +} + +void ShortcutWindow::addTab(const std::string &name, + ShortcutContainer *const content) +{ + ScrollArea *const scroll = new ScrollArea(content, false); + scroll->setPosition(SCROLL_PADDING, SCROLL_PADDING); + scroll->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER); + content->setWidget2(this); + Tab *const tab = new ShortcutTab(this, name, content); + mTabs->addTab(tab, scroll); + mPages.push_back(content); +} + +int ShortcutWindow::getTabIndex() const +{ + if (!mTabs) + return 0; + return mTabs->getSelectedTabIndex(); +} + +void ShortcutWindow::widgetHidden(const gcn::Event &event) +{ + if (mItems) + mItems->widgetHidden(event); + if (mTabs) + { + ScrollArea *const scroll = static_cast<ScrollArea *const>( + mTabs->getCurrentWidget()); + if (scroll) + { + ShortcutContainer *const content = static_cast<ShortcutContainer*>( + scroll->getContent()); + + if (content) + content->widgetHidden(event); + } + } +} + +void ShortcutWindow::mousePressed(gcn::MouseEvent &event) +{ + Window::mousePressed(event); + + if (event.isConsumed()) + return; + + if (event.getButton() == gcn::MouseEvent::LEFT) + { + mDragOffsetX = event.getX(); + mDragOffsetY = event.getY(); + } +} + +void ShortcutWindow::mouseDragged(gcn::MouseEvent &event) +{ + Window::mouseDragged(event); + + if (event.isConsumed()) + return; + + if (canMove() && isMovable() && mMoved) + { + int newX = std::max(0, getX() + event.getX() - mDragOffsetX); + int newY = std::max(0, getY() + event.getY() - mDragOffsetY); + newX = std::min(mainGraphics->mWidth - getWidth(), newX); + newY = std::min(mainGraphics->mHeight - getHeight(), newY); + setPosition(newX, newY); + } +} + +void ShortcutWindow::widgetMoved(const gcn::Event& event) +{ + Window::widgetMoved(event); + if (mItems) + mItems->setRedraw(true); + FOR_EACH (std::vector<ShortcutContainer*>::iterator, it, mPages) + (*it)->setRedraw(true); +} + +#ifdef USE_PROFILER +void ShortcutWindow::logicChildren() +{ + BLOCK_START("ShortcutWindow::logicChildren") + BasicContainer::logicChildren(); + BLOCK_END("ShortcutWindow::logicChildren") +} +#endif |