summaryrefslogtreecommitdiff
path: root/src/gui/shortcutwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/shortcutwindow.cpp')
-rw-r--r--src/gui/shortcutwindow.cpp152
1 files changed, 152 insertions, 0 deletions
diff --git a/src/gui/shortcutwindow.cpp b/src/gui/shortcutwindow.cpp
new file mode 100644
index 000000000..c3aa8454f
--- /dev/null
+++ b/src/gui/shortcutwindow.cpp
@@ -0,0 +1,152 @@
+/*
+ * The Mana Client
+ * Copyright (C) 2007-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ *
+ * This file is part of The Mana 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/shortcutwindow.h"
+
+#include "configuration.h"
+
+#include "gui/setup.h"
+
+#include "gui/widgets/layout.h"
+#include "gui/widgets/scrollarea.h"
+#include "gui/widgets/shortcutcontainer.h"
+#include "gui/widgets/tab.h"
+#include "gui/widgets/tabbedarea.h"
+
+static const int SCROLL_PADDING = 0;
+
+int ShortcutWindow::mBoxesWidth = 0;
+
+class ShortcutTab : public Tab
+{
+ public:
+ ShortcutTab(std::string name, ShortcutContainer* content)
+ {
+ setCaption(name);
+ mContent = content;
+ }
+
+ ShortcutContainer* mContent;
+};
+
+ShortcutWindow::ShortcutWindow(const std::string &title,
+ ShortcutContainer *content,
+ int width, int height)
+{
+ setWindowName(title);
+ // no title presented, title bar is padding so window can be moved.
+ gcn::Window::setTitleBarHeight(gcn::Window::getPadding());
+ setShowTitle(false);
+ setResizable(true);
+ setDefaultVisible(false);
+ setSaveVisible(true);
+
+ setupWindow->registerWindowForReset(this);
+
+ mTabs = 0;
+ mItems = content;
+
+ 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 = new ScrollArea(mItems);
+ mScrollArea->setPosition(SCROLL_PADDING, SCROLL_PADDING);
+ mScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
+ mScrollArea->setOpaque(false);
+
+ place(0, 0, mScrollArea, 5, 5).setPadding(0);
+
+ Layout &layout = getLayout();
+ layout.setRowHeight(0, Layout::AUTO_SET);
+ layout.setMargin(0);
+
+ loadWindowState();
+}
+
+ShortcutWindow::ShortcutWindow(const std::string &title, int width, int height)
+{
+ setWindowName(title);
+ // no title presented, title bar is padding so window can be moved.
+ gcn::Window::setTitleBarHeight(gcn::Window::getPadding());
+ setShowTitle(false);
+ setResizable(true);
+ setDefaultVisible(false);
+ setSaveVisible(true);
+
+ setupWindow->registerWindowForReset(this);
+
+ mTabs = new TabbedArea;
+
+ mItems = 0;
+
+ 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();
+}
+
+ShortcutWindow::~ShortcutWindow()
+{
+ delete mTabs;
+ mTabs = 0;
+ delete mItems;
+ mItems = 0;
+}
+
+void ShortcutWindow::addTab(std::string name, ShortcutContainer *content)
+{
+ ScrollArea *scroll = new ScrollArea(content);
+ scroll->setPosition(SCROLL_PADDING, SCROLL_PADDING);
+ scroll->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
+ scroll->setOpaque(false);
+ Tab *tab = new ShortcutTab(name, content);
+ mTabs->addTab(tab, scroll);
+}
+
+int ShortcutWindow::getTabIndex()
+{
+ if (!mTabs)
+ return 0;
+ return mTabs->getSelectedTabIndex();
+}