diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-24 21:55:39 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-24 21:55:39 (GMT) |
| commit | 6b08d1e2f9196ee2f6b810300e4aeb841b0d6a6d (patch) | |
| tree | d9272735c773766ff739a956282c317886f990ed /src/interface/ContextMenu.cpp | |
| parent | 7ef3f8cbe942c2f7ed47c4eea4248f21d407d71c (diff) | |
| download | powder-6b08d1e2f9196ee2f6b810300e4aeb841b0d6a6d.zip powder-6b08d1e2f9196ee2f6b810300e4aeb841b0d6a6d.tar.gz | |
Copy, cut and paste for Textboxes
Diffstat (limited to 'src/interface/ContextMenu.cpp')
| -rw-r--r-- | src/interface/ContextMenu.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/interface/ContextMenu.cpp b/src/interface/ContextMenu.cpp new file mode 100644 index 0000000..632b314 --- /dev/null +++ b/src/interface/ContextMenu.cpp @@ -0,0 +1,86 @@ +#include "ContextMenu.h" + +using namespace ui; + +class ContextMenu::ItemSelectedAction: public ButtonAction +{ + ContextMenu * window; + int item; +public: + ItemSelectedAction(ContextMenu * window, int itemID): window(window), item(itemID) { } + virtual void ActionCallback(ui::Button *sender) + { + window->ActionCallback(sender, item); + } +}; + +ContextMenu::ContextMenu(Component * source): + Window(ui::Point(0, 0), ui::Point(0, 0)), + Appearance(source->Appearance), + source(source) +{ +} + +void ContextMenu::Show(ui::Point position) +{ + for(int i = 0; i < buttons.size(); i++) + { + RemoveComponent(buttons[i]); + delete buttons[i]; + } + buttons.clear(); + + Position = position; + Size.Y = items.size()*15; + Size.X = 100; + + int currentY = 1; + for(int i = 0; i < items.size(); i++) + { + Button * tempButton = new Button(Point(1, currentY), Point(Size.X-2, 14), items[i].Text); + tempButton->Appearance = Appearance; + tempButton->Enabled = items[i].Enabled; + tempButton->SetActionCallback(new ItemSelectedAction(this, items[i].ID)); + buttons.push_back(tempButton); + AddComponent(tempButton); + currentY += 15; + } + + ui::Engine::Ref().ShowWindow(this); +} + +void ContextMenu::ActionCallback(ui::Button *sender, int item) +{ + ui::Engine::Ref().CloseWindow(); + source->OnContextMenuAction(item); +} + +void ContextMenu::OnMouseDown(int x, int y, unsigned button) +{ + if(!(x > Position.X && y > Position.Y && y < Position.Y+Size.Y && x < Position.X+Size.X)) //Clicked outside window + ui::Engine::Ref().CloseWindow(); +} + +void ContextMenu::RemoveItem(int id) +{ + for(int i = 0; i < items.size(); i++) + { + if(items[i].ID == id) + { + items.erase(items.begin()+i); + break; + } + } +} + +void ContextMenu::AddItem(ContextMenuItem item) +{ + items.push_back(item); +} + +void ContextMenu::OnDraw() +{ + Graphics * g = ui::Engine::Ref().g; + g->fillrect(Position.X, Position.Y, Size.X, Size.Y, 100, 100, 100, 255); + g->drawrect(Position.X, Position.Y, Size.X, Size.Y, Appearance.BackgroundInactive.Red, Appearance.BackgroundInactive.Green, Appearance.BackgroundInactive.Blue, Appearance.BackgroundInactive.Alpha); +}
\ No newline at end of file |
