1139749Simp/* 253790Sobrien * Copyright 2007, Ingo Weinhold <bonefish@cs.tu-berlin.de>. 353790Sobrien * All rights reserved. Distributed under the terms of the MIT License. 453790Sobrien */ 586266Sgroudier#ifndef WIDGET_LAYOUT_TEST_ABSTRACT_BUTTON_H 653790Sobrien#define WIDGET_LAYOUT_TEST_ABSTRACT_BUTTON_H 753790Sobrien 859743Sgroudier 959743Sgroudier#include <Invoker.h> 1053790Sobrien#include <List.h> 1153790Sobrien 1253790Sobrien#include "View.h" 1353790Sobrien 1453790Sobrien 1553790Sobrien// button behavior policy 1653790Sobrienenum button_policy { 1753790Sobrien BUTTON_POLICY_TOGGLE_ON_RELEASE, // check box 1853790Sobrien BUTTON_POLICY_SELECT_ON_RELEASE, // radio button 1953790Sobrien BUTTON_POLICY_INVOKE_ON_RELEASE // button 2053790Sobrien}; 2153790Sobrien 2253790Sobrien 2353790Sobrien// AbstractButton 2453790Sobrienclass AbstractButton : public View, public BInvoker { 2553790Sobrienpublic: 2653790Sobrien AbstractButton(button_policy policy, 2753790Sobrien BMessage* message = NULL, 2853790Sobrien BMessenger target = BMessenger()); 2953790Sobrien 3053790Sobrien void SetPolicy(button_policy policy); 3153790Sobrien button_policy Policy() const; 3253790Sobrien 3353790Sobrien void SetSelected(bool selected); 3453790Sobrien bool IsSelected() const; 3553790Sobrien 3653790Sobrien virtual void MouseDown(BPoint where, uint32 buttons, 3753790Sobrien int32 modifiers); 3853790Sobrien virtual void MouseUp(BPoint where, uint32 buttons, 3953790Sobrien int32 modifiers); 4053790Sobrien virtual void MouseMoved(BPoint where, uint32 buttons, 4153790Sobrien int32 modifiers); 4253790Sobrien 4353790Sobrienpublic: 4453790Sobrien class Listener; 4553790Sobrien 4653790Sobrien void AddListener(Listener* listener); 4753790Sobrien void RemoveListener(Listener* listener); 4853790Sobrien 4953790Sobrienprotected: 5053790Sobrien bool IsPressed() const; 5153790Sobrien 5253790Sobrienprivate: 5353790Sobrien void _PressedUpdate(BPoint where); 5453790Sobrien void _NotifyListeners(); 5553790Sobrien 5653790Sobrienprivate: 5755258Sobrien button_policy fPolicy; 5855258Sobrien bool fSelected; 5955258Sobrien bool fPressed; 6053790Sobrien bool fPressedInBounds; 6153790Sobrien BList fListeners; 6253790Sobrien}; 6353790Sobrien 6453790Sobrien 6553790Sobrien// synchronous listener interface 6653790Sobrienclass AbstractButton::Listener { 6753790Sobrienpublic: 6853790Sobrien virtual ~Listener(); 6959743Sgroudier 7059743Sgroudier virtual void SelectionChanged(AbstractButton* button) = 0; 7159743Sgroudier}; 7259743Sgroudier 7359743Sgroudier 7453790Sobrien#endif // WIDGET_LAYOUT_TEST_ABSTRACT_BUTTON_H 7553790Sobrien