summaryrefslogtreecommitdiff
path: root/src/gui/windows/shortcutwindow.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2013-09-30 14:03:48 +0300
committerAndrei Karas <akaras@inbox.ru>2013-09-30 14:03:48 +0300
commit25d77892d72d455f8a89372687db45aefbc61cec (patch)
treede03cb1af09eebf6db853a6585b953884bcca3b2 /src/gui/windows/shortcutwindow.cpp
parent05c22dd1a69fe90da67188c74a6995ee3747e937 (diff)
downloadmv-25d77892d72d455f8a89372687db45aefbc61cec.tar.gz
mv-25d77892d72d455f8a89372687db45aefbc61cec.tar.bz2
mv-25d77892d72d455f8a89372687db45aefbc61cec.tar.xz
mv-25d77892d72d455f8a89372687db45aefbc61cec.zip
move windows classes to windows directory.
Diffstat (limited to 'src/gui/windows/shortcutwindow.cpp')
-rw-r--r--src/gui/windows/shortcutwindow.cpp242
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