* Copyright (c) 1999-2000, Eric Moon.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions, and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __MediaNodePanel_H__
#define __MediaNodePanel_H__
#include "DiagramBox.h"
#include "MediaJack.h"
#include <vector>
#include <String.h>
#include "IStateArchivable.h"
#include "cortex_defs.h"
__BEGIN_CORTEX_NAMESPACE
int compareID(const void *lValue, const void *rValue);
class MediaIcon;
class NodeRef;
class MediaNodePanel : public DiagramBox,
public BHandler,
public IStateArchivable
{
typedef DiagramBox _inherited;
public:
static float M_DEFAULT_WIDTH;
static float M_DEFAULT_HEIGHT;
static float M_LABEL_H_MARGIN;
static float M_LABEL_V_MARGIN;
static float M_BODY_H_MARGIN;
static float M_BODY_V_MARGIN;
public:
NodeRef* const ref;
public:
MediaNodePanel(
BPoint position,
NodeRef *nodeRef);
virtual ~MediaNodePanel();
public:
virtual void attachedToDiagram();
virtual void detachedFromDiagram();
virtual void DrawBox();
virtual void MouseDown(
BPoint point,
uint32 buttons,
uint32 clicks);
virtual void MouseOver(
BPoint point,
uint32 transit);
virtual void MessageDropped(
BPoint point,
BMessage *message);
virtual void selected();
virtual void deselected();
public:
virtual void MessageReceived(
BMessage *message);
public:
void layoutChanged(
int32 layout);
void populateInit();
void updateIOJacks();
void arrangeIOJacks();
void showContextMenu(
BPoint point);
public:
friend int compareID(
const void *lValue,
const void *rValue);
public:
status_t importState(
const BMessage* archive);
status_t exportState(
BMessage* archive) const;
private:
void _prepareLabel();
void _updateBitmap();
void _drawInto(
BView *target,
BRect targetRect,
int32 layout);
void _updateIcon(
int32 layout);
private:
BBitmap *m_bitmap;
BBitmap *m_icon;
BString m_label;
BString m_fullLabel;
bool m_labelTruncated;
BPoint m_labelOffset;
BRect m_labelRect;
BRect m_bodyRect;
BPoint m_alternatePosition;
bool m_mouseOverLabel;
static const BPoint s_invalidPosition;
};
__END_CORTEX_NAMESPACE
#endif