Commit 5c4ccbb1 authored by Olivier Teulière's avatar Olivier Teulière

* skins2: The Image control now supports the "action2" attribute (feel free to

   suggest a better name :)), triggered by a double click.
   Very kewl to change the layout...
parent 676c8980
...@@ -32,10 +32,10 @@ ...@@ -32,10 +32,10 @@
CtrlImage::CtrlImage( intf_thread_t *pIntf, const GenericBitmap &rBitmap, CtrlImage::CtrlImage( intf_thread_t *pIntf, const GenericBitmap &rBitmap,
resize_t resizeMethod, const UString &rHelp, CmdGeneric &rCommand, resize_t resizeMethod,
VarBool *pVisible ): const UString &rHelp, VarBool *pVisible ):
CtrlFlat( pIntf, rHelp, pVisible ), m_rBitmap( rBitmap ), CtrlFlat( pIntf, rHelp, pVisible ), m_rBitmap( rBitmap ),
m_resizeMethod( resizeMethod ) m_rCommand( rCommand ), m_resizeMethod( resizeMethod )
{ {
OSFactory *pOsFactory = OSFactory::instance( pIntf ); OSFactory *pOsFactory = OSFactory::instance( pIntf );
// Create an initial unscaled image in the buffer // Create an initial unscaled image in the buffer
...@@ -64,7 +64,10 @@ void CtrlImage::handleEvent( EvtGeneric &rEvent ) ...@@ -64,7 +64,10 @@ void CtrlImage::handleEvent( EvtGeneric &rEvent )
CmdDlgHidePopupMenu cmd( getIntf() ); CmdDlgHidePopupMenu cmd( getIntf() );
cmd.execute(); cmd.execute();
} }
else if( rEvent.getAsString() == "mouse:left:dblclick:none" )
{
m_rCommand.execute();
}
} }
...@@ -97,8 +100,8 @@ void CtrlImage::draw( OSGraphics &rImage, int xDest, int yDest ) ...@@ -97,8 +100,8 @@ void CtrlImage::draw( OSGraphics &rImage, int xDest, int yDest )
if( m_resizeMethod == kScale ) if( m_resizeMethod == kScale )
{ {
// Use scaling method // Use scaling method
if( width != m_pImage->getWidth() || if( width != m_pImage->getWidth() ||
height != m_pImage->getHeight() ) height != m_pImage->getHeight() )
{ {
OSFactory *pOsFactory = OSFactory::instance( getIntf() ); OSFactory *pOsFactory = OSFactory::instance( getIntf() );
// Rescale the image with the actual size of the control // Rescale the image with the actual size of the control
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
class GenericBitmap; class GenericBitmap;
class OSGraphics; class OSGraphics;
class CmdGeneric;
/// Control image /// Control image
...@@ -45,8 +46,8 @@ class CtrlImage: public CtrlFlat ...@@ -45,8 +46,8 @@ class CtrlImage: public CtrlFlat
// Create an image with the given bitmap (which is NOT copied) // Create an image with the given bitmap (which is NOT copied)
CtrlImage( intf_thread_t *pIntf, const GenericBitmap &rBitmap, CtrlImage( intf_thread_t *pIntf, const GenericBitmap &rBitmap,
resize_t resizeMethod, const UString &rHelp, CmdGeneric &rCommand, resize_t resizeMethod,
VarBool *pVisible ); const UString &rHelp, VarBool *pVisible );
virtual ~CtrlImage(); virtual ~CtrlImage();
/// Handle an event on the control /// Handle an event on the control
...@@ -66,6 +67,8 @@ class CtrlImage: public CtrlFlat ...@@ -66,6 +67,8 @@ class CtrlImage: public CtrlFlat
const GenericBitmap &m_rBitmap; const GenericBitmap &m_rBitmap;
/// Buffer to stored the rendered bitmap /// Buffer to stored the rendered bitmap
OSGraphics *m_pImage; OSGraphics *m_pImage;
/// Command triggered by a double-click on the image
CmdGeneric &m_rCommand;
/// Resize method /// Resize method
resize_t m_resizeMethod; resize_t m_resizeMethod;
}; };
......
...@@ -461,6 +461,13 @@ void Builder::addImage( const BuilderData::Image &rData ) ...@@ -461,6 +461,13 @@ void Builder::addImage( const BuilderData::Image &rData )
return; return;
} }
CmdGeneric *pCommand = parseAction( rData.m_action2Id );
if( pCommand == NULL )
{
msg_Err( getIntf(), "Invalid action: %s", rData.m_action2Id.c_str() );
return;
}
// Get the visibility variable // Get the visibility variable
// XXX check when it is null // XXX check when it is null
Interpreter *pInterpreter = Interpreter::instance( getIntf() ); Interpreter *pInterpreter = Interpreter::instance( getIntf() );
...@@ -468,8 +475,8 @@ void Builder::addImage( const BuilderData::Image &rData ) ...@@ -468,8 +475,8 @@ void Builder::addImage( const BuilderData::Image &rData )
CtrlImage::resize_t resizeMethod = CtrlImage::resize_t resizeMethod =
(rData.m_resize == "scale" ? CtrlImage::kScale : CtrlImage::kMosaic); (rData.m_resize == "scale" ? CtrlImage::kScale : CtrlImage::kMosaic);
CtrlImage *pImage = new CtrlImage( getIntf(), *pBmp, resizeMethod, CtrlImage *pImage = new CtrlImage( getIntf(), *pBmp, *pCommand,
UString( getIntf(), rData.m_help.c_str() ), pVisible ); resizeMethod, UString( getIntf(), rData.m_help.c_str() ), pVisible );
// Compute the position of the control // Compute the position of the control
const Position pos = makePosition( rData.m_leftTop, rData.m_rightBottom, const Position pos = makePosition( rData.m_leftTop, rData.m_rightBottom,
......
...@@ -8,7 +8,7 @@ Layout id:string width:int height:int minWidth:int maxWidth:int minHeight:int ma ...@@ -8,7 +8,7 @@ Layout id:string width:int height:int minWidth:int maxWidth:int minHeight:int ma
Anchor xPos:int yPos:int range:int priority:int points:string layoutId:string Anchor xPos:int yPos:int range:int priority:int points:string layoutId:string
Button id:string xPos:int yPos:int leftTop:string rightBottom:string visible:string upId:string downId:string overId:string actionId:string tooltip:string help:string layer:int windowId:string layoutId:string Button id:string xPos:int yPos:int leftTop:string rightBottom:string visible:string upId:string downId:string overId:string actionId:string tooltip:string help:string layer:int windowId:string layoutId:string
Checkbox id:string xPos:int yPos:int leftTop:string rightBottom:string visible:string up1Id:string down1Id:string over1Id:string up2Id:string down2Id:string over2Id:string state:string action1:string action2:string tooltip1:string tooltip2:string help:string layer:int windowId:string layoutId:string Checkbox id:string xPos:int yPos:int leftTop:string rightBottom:string visible:string up1Id:string down1Id:string over1Id:string up2Id:string down2Id:string over2Id:string state:string action1:string action2:string tooltip1:string tooltip2:string help:string layer:int windowId:string layoutId:string
Image id:string xPos:int yPos:int leftTop:string rightBottom:string visible:string bmpId:string actionId:string resize:string help:string layer:int windowId:string layoutId:string Image id:string xPos:int yPos:int leftTop:string rightBottom:string visible:string bmpId:string actionId:string action2Id:string resize:string help:string layer:int windowId:string layoutId:string
Text id:string xPos:int yPos:int visible:string fontId:string text:string width:int leftTop:string rightBottom:string color:uint32_t scrolling:string alignment:string help:string layer:int windowId:string layoutId:string Text id:string xPos:int yPos:int visible:string fontId:string text:string width:int leftTop:string rightBottom:string color:uint32_t scrolling:string alignment:string help:string layer:int windowId:string layoutId:string
RadialSlider id:string visible:string xPos:int yPos:int leftTop:string rightBottom:string sequence:string nbImages:int minAngle:float maxAngle:float value:string tooltip:string help:string layer:int windowId:string layoutId:string RadialSlider id:string visible:string xPos:int yPos:int leftTop:string rightBottom:string sequence:string nbImages:int minAngle:float maxAngle:float value:string tooltip:string help:string layer:int windowId:string layoutId:string
Slider id:string visible:string xPos:int yPos:int leftTop:string rightBottom:string upId:string downId:string overId:string points:string thickness:int value:string imageId:string nbHoriz:int nbVert:int padHoriz:int padVert:int tooltip:string help:string layer:int windowId:string layoutId:string Slider id:string visible:string xPos:int yPos:int leftTop:string rightBottom:string upId:string downId:string overId:string points:string thickness:int value:string imageId:string nbHoriz:int nbVert:int padHoriz:int padVert:int tooltip:string help:string layer:int windowId:string layoutId:string
......
...@@ -217,8 +217,8 @@ m_id( id ), m_xPos( xPos ), m_yPos( yPos ), m_leftTop( leftTop ), m_rightBottom( ...@@ -217,8 +217,8 @@ m_id( id ), m_xPos( xPos ), m_yPos( yPos ), m_leftTop( leftTop ), m_rightBottom(
/// Type definition /// Type definition
struct Image struct Image
{ {
Image( const string & id, int xPos, int yPos, const string & leftTop, const string & rightBottom, const string & visible, const string & bmpId, const string & actionId, const string & resize, const string & help, int layer, const string & windowId, const string & layoutId ): Image( const string & id, int xPos, int yPos, const string & leftTop, const string & rightBottom, const string & visible, const string & bmpId, const string & actionId, const string & action2Id, const string & resize, const string & help, int layer, const string & windowId, const string & layoutId ):
m_id( id ), m_xPos( xPos ), m_yPos( yPos ), m_leftTop( leftTop ), m_rightBottom( rightBottom ), m_visible( visible ), m_bmpId( bmpId ), m_actionId( actionId ), m_resize( resize ), m_help( help ), m_layer( layer ), m_windowId( windowId ), m_layoutId( layoutId ) {} m_id( id ), m_xPos( xPos ), m_yPos( yPos ), m_leftTop( leftTop ), m_rightBottom( rightBottom ), m_visible( visible ), m_bmpId( bmpId ), m_actionId( actionId ), m_action2Id( action2Id ), m_resize( resize ), m_help( help ), m_layer( layer ), m_windowId( windowId ), m_layoutId( layoutId ) {}
string m_id; string m_id;
int m_xPos; int m_xPos;
...@@ -228,6 +228,7 @@ m_id( id ), m_xPos( xPos ), m_yPos( yPos ), m_leftTop( leftTop ), m_rightBottom( ...@@ -228,6 +228,7 @@ m_id( id ), m_xPos( xPos ), m_yPos( yPos ), m_leftTop( leftTop ), m_rightBottom(
string m_visible; string m_visible;
string m_bmpId; string m_bmpId;
string m_actionId; string m_actionId;
string m_action2Id;
string m_resize; string m_resize;
string m_help; string m_help;
int m_layer; int m_layer;
......
...@@ -213,14 +213,15 @@ void SkinParser::handleBeginElement( const string &rName, AttrList_t &attr ) ...@@ -213,14 +213,15 @@ void SkinParser::handleBeginElement( const string &rName, AttrList_t &attr )
CheckDefault( "lefttop", "lefttop" ); CheckDefault( "lefttop", "lefttop" );
CheckDefault( "rightbottom", "lefttop" ); CheckDefault( "rightbottom", "lefttop" );
CheckDefault( "action", "none" ); CheckDefault( "action", "none" );
CheckDefault( "action2", "none" );
CheckDefault( "resize", "mosaic" ); CheckDefault( "resize", "mosaic" );
CheckDefault( "help", "" ); CheckDefault( "help", "" );
const BuilderData::Image imageData( uniqueId( attr["id"] ), const BuilderData::Image imageData( uniqueId( attr["id"] ),
atoi( attr["x"] ) + m_xOffset, atoi( attr["y"] ) + m_yOffset, atoi( attr["x"] ) + m_xOffset, atoi( attr["y"] ) + m_yOffset,
attr["lefttop"], attr["rightbottom"], attr["visible"], attr["lefttop"], attr["rightbottom"], attr["visible"],
attr["image"], attr["action"], attr["resize"], attr["help"], attr["image"], attr["action"], attr["action2"], attr["resize"],
m_curLayer, m_curWindowId, m_curLayoutId ); attr["help"], m_curLayer, m_curWindowId, m_curLayoutId );
m_curLayer++; m_curLayer++;
m_pData->m_listImage.push_back( imageData ); m_pData->m_listImage.push_back( imageData );
} }
......
...@@ -96,6 +96,7 @@ ...@@ -96,6 +96,7 @@
rightbottom CDATA "lefttop" rightbottom CDATA "lefttop"
image CDATA #REQUIRED image CDATA #REQUIRED
action CDATA "none" action CDATA "none"
action CDATA "none2"
resize CDATA "mosaic" resize CDATA "mosaic"
help CDATA "" help CDATA ""
> >
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment