From 3436558bfd7bbbe0c63a0a89330b099b7c9da7ed Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 3 Jan 2011 05:36:14 +0200 Subject: Add inventory filter control with only value All. --- src/CMakeLists.txt | 4 +++ src/Makefile.am | 4 +++ src/gui/inventorywindow.cpp | 45 ++++++++++++++++++++--------- src/gui/inventorywindow.h | 4 ++- src/gui/widgets/horizontcontainer.cpp | 53 ++++++++++++++++++++++++++++++++++ src/gui/widgets/horizontcontainer.h | 54 +++++++++++++++++++++++++++++++++++ src/gui/widgets/inventoryfilter.cpp | 41 ++++++++++++++++++++++++++ src/gui/widgets/inventoryfilter.h | 52 +++++++++++++++++++++++++++++++++ 8 files changed, 242 insertions(+), 15 deletions(-) create mode 100644 src/gui/widgets/horizontcontainer.cpp create mode 100644 src/gui/widgets/horizontcontainer.h create mode 100644 src/gui/widgets/inventoryfilter.cpp create mode 100644 src/gui/widgets/inventoryfilter.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bb7b6e4b2..2dfbfcb7c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -153,10 +153,14 @@ SET(SRCS gui/widgets/emoteshortcutcontainer.h gui/widgets/flowcontainer.cpp gui/widgets/flowcontainer.h + gui/widgets/horizontcontainer.cpp + gui/widgets/horizontcontainer.h gui/widgets/icon.cpp gui/widgets/icon.h gui/widgets/inttextfield.cpp gui/widgets/inttextfield.h + gui/widgets/inventoryfilter.cpp + gui/widgets/inventoryfilter.h gui/widgets/itemcontainer.cpp gui/widgets/itemcontainer.h gui/widgets/itemlinkhandler.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 311f0d8e2..29520258b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -49,10 +49,14 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ gui/widgets/emoteshortcutcontainer.h \ gui/widgets/flowcontainer.cpp \ gui/widgets/flowcontainer.h \ + gui/widgets/horizontcontainer.cpp \ + gui/widgets/horizontcontainer.h \ gui/widgets/icon.cpp \ gui/widgets/icon.h \ gui/widgets/inttextfield.cpp \ gui/widgets/inttextfield.h \ + gui/widgets/inventoryfilter.cpp \ + gui/widgets/inventoryfilter.h \ gui/widgets/itemcontainer.cpp \ gui/widgets/itemcontainer.h \ gui/widgets/itemlinkhandler.cpp \ diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp index abb702005..8ae9c0f32 100644 --- a/src/gui/inventorywindow.cpp +++ b/src/gui/inventorywindow.cpp @@ -35,10 +35,13 @@ #include "gui/viewport.h" #include "gui/widgets/button.h" +#include "gui/widgets/container.h" +#include "gui/widgets/inventoryfilter.h" #include "gui/widgets/itemcontainer.h" #include "gui/widgets/label.h" #include "gui/widgets/layout.h" #include "gui/widgets/progressbar.h" +#include "gui/widgets/radiobutton.h" #include "gui/widgets/scrollarea.h" #include "net/inventoryhandler.h" @@ -89,6 +92,12 @@ InventoryWindow::InventoryWindow(Inventory *inventory): mSlotsLabel = new Label(_("Slots:")); mSlotsBar = new ProgressBar(0.0f, 100, 20, Theme::PROG_INVY_SLOTS); + mFilter = new InventoryFilter(getWindowName(), 20, 10); + + mFilterLabel = new Label(_("Filter:")); + + mFilter->add("All"); + if (isMainInventory()) { std::string equip = _("Equip"); @@ -114,17 +123,21 @@ InventoryWindow::InventoryWindow(Inventory *inventory): mWeightLabel = new Label(_("Weight:")); mWeightBar = new ProgressBar(0.0f, 100, 20, Theme::PROG_WEIGHT); - place(0, 0, mWeightLabel).setPadding(3); + place(0, 0, mWeightLabel, 1).setPadding(3); place(1, 0, mWeightBar, 3); - place(4, 0, mSlotsLabel).setPadding(3); + place(4, 0, mSlotsLabel, 1).setPadding(3); place(5, 0, mSlotsBar, 2); - place(0, 1, invenScroll, 7).setPadding(3); - place(0, 2, mUseButton); - place(1, 2, mUseButton2); - place(2, 2, mDropButton); - place(4, 2, mSplitButton); - place(5, 2, mShopButton); - place(6, 2, mOutfitButton); + + place(0, 1, mFilterLabel, 1).setPadding(3); + place(1, 1, mFilter, 6).setPadding(3); + + place(0, 2, invenScroll, 7).setPadding(3); + place(0, 3, mUseButton); + place(1, 3, mUseButton2); + place(2, 3, mDropButton); + place(4, 3, mSplitButton); + place(5, 3, mShopButton); + place(6, 3, mOutfitButton); updateWeight(); } @@ -136,14 +149,18 @@ InventoryWindow::InventoryWindow(Inventory *inventory): place(0, 0, mSlotsLabel).setPadding(3); place(1, 0, mSlotsBar, 3); - place(0, 1, invenScroll, 4, 4); - place(0, 5, mStoreButton); - place(1, 5, mRetrieveButton); - place(3, 5, mCloseButton); + + place(0, 1, mFilterLabel, 1).setPadding(3); + place(1, 1, mFilter, 3).setPadding(3); + + place(0, 2, invenScroll, 4, 4); + place(0, 6, mStoreButton); + place(1, 6, mRetrieveButton); + place(3, 6, mCloseButton); } Layout &layout = getLayout(); - layout.setRowHeight(1, Layout::AUTO_SET); + layout.setRowHeight(2, Layout::AUTO_SET); mInventory->addInventoyListener(this); diff --git a/src/gui/inventorywindow.h b/src/gui/inventorywindow.h index 87f57eb9d..664a22f4b 100644 --- a/src/gui/inventorywindow.h +++ b/src/gui/inventorywindow.h @@ -42,6 +42,7 @@ class Item; class ItemContainer; +class InventoryFilter; class ProgressBar; class TextBox; @@ -143,9 +144,10 @@ class InventoryWindow : public Window, *mSplitButton, *mOutfitButton, *mShopButton, *mStoreButton, *mRetrieveButton, *mCloseButton; - gcn::Label *mWeightLabel, *mSlotsLabel; + gcn::Label *mWeightLabel, *mSlotsLabel, *mFilterLabel; ProgressBar *mWeightBar, *mSlotsBar; + InventoryFilter *mFilter; bool mSplit; }; diff --git a/src/gui/widgets/horizontcontainer.cpp b/src/gui/widgets/horizontcontainer.cpp new file mode 100644 index 000000000..6ecd3f933 --- /dev/null +++ b/src/gui/widgets/horizontcontainer.cpp @@ -0,0 +1,53 @@ +/* + * The Mana Client + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011 The ManaPlus 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 . + */ + +#include "gui/widgets/horizontcontainer.h" + +HorizontContainer::HorizontContainer(int height, int spacing): + mSpacing(spacing), + mCount(0), + mLastX(0) +{ + setHeight(height); + addWidgetListener(this); +} + +void HorizontContainer::add(gcn::Widget *widget) +{ + if (!widget) + return; + + Container::add(widget); + widget->setPosition(mLastX, 0); + mCount++; + mLastX += widget->getWidth() + mSpacing; +} + +void HorizontContainer::clear() +{ + Container::clear(); + + mCount = 0; +} + +void HorizontContainer::widgetResized(const gcn::Event &event _UNUSED_) +{ +} diff --git a/src/gui/widgets/horizontcontainer.h b/src/gui/widgets/horizontcontainer.h new file mode 100644 index 000000000..b8325a564 --- /dev/null +++ b/src/gui/widgets/horizontcontainer.h @@ -0,0 +1,54 @@ +/* + * The Mana Client + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011 The ManaPlus 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 . + */ + +#ifndef GUI_HORIZONTCONTAINER_H +#define GUI_HORIZONTCONTAINER_H + +#include "gui/widgets/container.h" + +#include + +#ifdef __GNUC__ +#define _UNUSED_ __attribute__ ((unused)) +#else +#define _UNUSED_ +#endif + +/** + * A widget container. + * + * This container places it's contents veritcally. + */ +class HorizontContainer : public Container, public gcn::WidgetListener +{ + public: + HorizontContainer(int height, int spacing); + virtual void add(gcn::Widget *widget); + virtual void clear(); + void widgetResized(const gcn::Event &event); + + protected: + int mSpacing; + int mCount; + int mLastX; +}; + +#endif diff --git a/src/gui/widgets/inventoryfilter.cpp b/src/gui/widgets/inventoryfilter.cpp new file mode 100644 index 000000000..406860719 --- /dev/null +++ b/src/gui/widgets/inventoryfilter.cpp @@ -0,0 +1,41 @@ +/* + * The Mana Client + * Copyright (C) 2011 The ManaPlus 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 . + */ + +#include "gui/widgets/inventoryfilter.h" + +#include "gui/widgets/horizontcontainer.h" +#include "gui/widgets/radiobutton.h" + + +InventoryFilter::InventoryFilter(std::string group, int height, int spacing): + HorizontContainer(height, spacing), + mGroup(group) +{ +} + +void InventoryFilter::add(std::string tag) +{ + if (tag.empty()) + return; + + RadioButton *radio = new RadioButton(tag, mGroup, mCount == 0); + radio->adjustSize(); + HorizontContainer::add(radio); +} diff --git a/src/gui/widgets/inventoryfilter.h b/src/gui/widgets/inventoryfilter.h new file mode 100644 index 000000000..36112d374 --- /dev/null +++ b/src/gui/widgets/inventoryfilter.h @@ -0,0 +1,52 @@ +/* + * The Mana Client + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011 The ManaPlus 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 . + */ + +#ifndef GUI_INVENTORYFILTER_H +#define GUI_INVENTORYFILTER_H + +#include + +#include "gui/widgets/horizontcontainer.h" + +#ifdef __GNUC__ +#define _UNUSED_ __attribute__ ((unused)) +#else +#define _UNUSED_ +#endif + +//class HorizontContainer; + +/** + * A widget container. + * + * This container places it's contents veritcally. + */ +class InventoryFilter : public HorizontContainer +{ + public: + InventoryFilter(std::string group, int height, int spacing); + void add(std::string tag); + + private: + std::string mGroup; +}; + +#endif -- cgit v1.2.3-70-g09d2