Files
LFSDesktopProject/LFSToolKit/examples/RunExamples.cpp
2024-04-21 16:24:21 +01:00

296 lines
9.8 KiB
C++
Executable File

#if 0
#(c)keithhedger Sat 13 Oct 17:20:15 BST 2018 kdhedger68713@gmail.com
if [ "X$1" != "X" ];then
USEVALGRIND="valgrind --leak-check=full"
fi
(
cd ..
make ${MAKEFLAGS:--j4}
)
APPNAME=$(basename $0 .cpp)
cd "$(dirname "$0")"
g++ -Wstack-protector -Werror -fstack-protector "$0" -O0 -ggdb -I../LFSToolKit -L../LFSToolKit/app/.libs $(pkg-config --cflags --libs x11 xft cairo glib-2.0) -llfstoolkit -lImlib2 -Wstack-protector -Werror -fstack-protector -o $APPNAME||exit 1
LD_LIBRARY_PATH=../LFSToolKit/app/.libs $USEVALGRIND ./$APPNAME "$@"
retval=$?
rm $APPNAME
exit $retval
#endif
#include "../config.h"
#include "lfstk/LFSTKGlobals.h"
#define BOXLABEL "Examples"
#define MAKEFLAGS "-j10 --output-sync"
LFSTK_applicationClass *apc=NULL;
LFSTK_windowClass *wc=NULL;
LFSTK_toggleButtonClass *useDbg=NULL;
LFSTK_toggleButtonClass *openFile=NULL;
LFSTK_toggleButtonClass *makeLib=NULL;
LFSTK_ExpanderGadgetClass *multi=NULL;
const char *dbg;
int retValOfCommand=0;
bool doQuit(void *p,void* ud)
{
apc->exitValue=0;
apc->mainLoop=false;
XSync(apc->display,true);
return(true);
}
bool buttonCB(void *p,void* ud)
{
char *command;
if(ud!=NULL)
{
if(makeLib->LFSTK_getValue()==true)
system("(pushd ..;make " MAKEFLAGS ";popd)");
asprintf(&command,"%s %s &",(const char*)ud,dbg);
retValOfCommand=system(command);
free(command);
if(openFile->LFSTK_getValue()==true)
{
asprintf(&command,"xdg-open $(pwd)/%s &",(const char*)ud);
system(command);
free(command);
}
}
return(true);
}
bool doDbg(void *p,void* ud)
{
char *command;
if(p!=NULL)
{
if(useDbg->LFSTK_getValue()==true)
dbg="dbg";
else
dbg="";
}
return(true);
}
int main(int argc, char **argv)
{
XEvent event;
int sy=0;
std::vector<hitRect> hrs;
bool useliveupdate=true;
dbg="";
apc=new LFSTK_applicationClass();
apc->LFSTK_addWindow(NULL,BOXLABEL,"LFSTKExample");
wc=apc->mainWindow;
//info
multi=new LFSTK_ExpanderGadgetClass(wc,"",0,0,DIALOGWIDTH,GADGETHITE*4);
multi->stretchX=true;
multi->lockY=LOCKTOTOP;
multi->gadgetStretch=STRETCH;
multi->liveUpdate=useliveupdate;
hrs.push_back({0,sy,DIALOGWIDTH,GADGETHITE,NULL});
hrs.back().gadget=new LFSTK_labelClass(wc,BOXLABEL,0,0,1,1);
hrs.back().gadget->LFSTK_setLabelGravity(CENTRE);
hrs.back().gadget->LFSTK_setCairoFontDataParts("sB",20);
sy+=YSPACING;
hrs.push_back({0,sy,DIALOGWIDTH,GADGETHITE,NULL});
hrs.back().gadget=new LFSTK_labelClass(wc,COPYRITE,0,0,1,1);
hrs.back().gadget->LFSTK_setLabelGravity(CENTRE);
sy+=HALFYSPACING;
hrs.push_back({0,sy,DIALOGWIDTH,GADGETHITE,NULL});
hrs.back().gadget=new LFSTK_labelClass(wc,PERSONAL,0,0,1,1);
hrs.back().gadget->LFSTK_setLabelGravity(CENTRE);
hrs.back().gadget->LFSTK_setCairoFontDataParts("B");
sy+=YSPACING;
multi->LFSTK_setHitRects(hrs);
hrs.clear();
//options
multi=new LFSTK_ExpanderGadgetClass(wc,"",0,sy,DIALOGWIDTH,GADGETHITE);
multi->stretchX=true;
multi->gadgetStretch=SPACESPREADX;
multi->liveUpdate=useliveupdate;
hrs.push_back({0,0,GADGETWIDTH,GADGETHITE,NULL});
useDbg=new LFSTK_toggleButtonClass(wc,"Use Valgrind",0,0,GADGETWIDTH,GADGETHITE,NorthWestGravity);
useDbg->LFSTK_setValue(false);
useDbg->LFSTK_setMouseCallBack(NULL,doDbg,NULL);
hrs.back().gadget=useDbg;
hrs.push_back({0,0,GADGETWIDTH,GADGETHITE,NULL});
openFile=new LFSTK_toggleButtonClass(wc,"Open File",0,0,GADGETWIDTH,GADGETHITE,NorthWestGravity);
openFile->LFSTK_setValue(false);
hrs.back().gadget=openFile;
hrs.push_back({0,0,GADGETWIDTH,GADGETHITE,NULL});
makeLib=new LFSTK_toggleButtonClass(wc,"Build Lib",0,0,GADGETWIDTH,GADGETHITE,NorthWestGravity);
makeLib->LFSTK_setValue(true);
hrs.back().gadget=makeLib;
multi->LFSTK_setHitRects(hrs);
hrs.clear();
//line
sy+=HALFYSPACING+12;
multi=new LFSTK_ExpanderGadgetClass(wc,"",0,sy,DIALOGWIDTH,GADGETHITE-11);
multi->stretchX=true;
multi->lockY=LOCKTOTOP;
multi->gadgetStretch=STRETCH;
multi->liveUpdate=useliveupdate;
hrs.push_back({0,0,DIALOGWIDTH,2,NULL});
hrs.back().gadget=new LFSTK_buttonClass(wc,"--",0,0,DIALOGWIDTH,2,BUTTONGRAV);
hrs.back().gadget->gadgetDetails.bevel=BEVELNONE;
hrs.back().gadget->gadgetDetails.buttonTile=false;
hrs.back().gadget->gadgetDetails.colour=&wc->windowColourNames[NORMALCOLOUR];
multi->LFSTK_setHitRects(hrs);
hrs.clear();
sy+=HALFYSPACING-4;
//run examples - middle bit
int internalsy=0;
multi=new LFSTK_ExpanderGadgetClass(wc,"",GADGETWIDTH+BORDER/2,sy,GADGETWIDTH*3+BORDER*2,GADGETHITE*13);
multi->stretchX=true;
multi->stretchY=true;
multi->gadgetStretch=STRETCH;
multi->liveUpdate=useliveupdate;
//lineedit
hrs.push_back({0,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Line Edit",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./lineedit.cpp"));
//multi line
hrs.push_back({GADGETWIDTH+multi->spacePad,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Multi Line Edit",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./multilineedit.cpp"));
//get icon path
hrs.push_back({(GADGETWIDTH+multi->spacePad)*2,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Get Icon Path",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./geticonpath.cpp"));
internalsy+=YSPACING;
//basic buttons
hrs.push_back({0,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Buttons",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./basic.cpp"));
//toggles
hrs.push_back({GADGETWIDTH+multi->spacePad,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Toggles",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./toggle.cpp"));
//expander
hrs.push_back({(GADGETWIDTH+multi->spacePad)*2,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Expander",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./expander.cpp"));
internalsy+=YSPACING;
//menus
hrs.push_back({GADGETWIDTH+multi->spacePad,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Menus",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./menus.cpp"));
internalsy+=YSPACING;
//dialogs
hrs.push_back({0,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Dialogs",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./dialogs.cpp"));
//fontdialog
hrs.push_back({(GADGETWIDTH+multi->spacePad)*2,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Font Dialog",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./fontdialog.cpp"));
internalsy+=YSPACING;
//list
hrs.push_back({GADGETWIDTH+multi->spacePad,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"List",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./list.cpp"));
internalsy+=YSPACING;
//window
hrs.push_back({0,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Window",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./window.cpp"));
//subwindow
hrs.push_back({(GADGETWIDTH+multi->spacePad)*2,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Sub Window",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./subwindowtest.cpp"));
internalsy+=YSPACING;
//image
hrs.push_back({0,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Image",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./image.cpp"));
//image buttons
hrs.push_back({(GADGETWIDTH+multi->spacePad)*2,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Image Buttons",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./imagebutton.cpp"));
internalsy+=YSPACING;
//scrollbar
hrs.push_back({GADGETWIDTH+multi->spacePad,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Scrollbar",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./scrollbar.cpp"));
internalsy+=YSPACING;
//lfsabout
hrs.push_back({GADGETWIDTH+multi->spacePad,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"LFS About",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./lfsabout.cpp"));
internalsy+=YSPACING;
//Calendar
hrs.push_back({GADGETWIDTH+multi->spacePad,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Calendar",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./calander.cpp"));
internalsy+=YSPACING;
//run command
hrs.push_back({GADGETWIDTH+multi->spacePad,internalsy,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Run Command",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,buttonCB,USERDATA("./lfsruncommand.cpp"));
internalsy+=YSPACING;
multi->LFSTK_setHitRects(hrs);
hrs.clear();
sy+=YSPACING*10;
//bottom bit
multi=new LFSTK_ExpanderGadgetClass(wc,"",0,sy,DIALOGWIDTH,6);
multi->stretchX=true;
multi->lockY=LOCKTOBOTTOM;
multi->gadgetStretch=STRETCH;
multi->liveUpdate=useliveupdate;
//line
hrs.push_back({0,0,DIALOGWIDTH,2,NULL});
hrs.back().gadget=new LFSTK_buttonClass(wc,"--",0,0,DIALOGWIDTH,2,BUTTONGRAV);
hrs.back().gadget->gadgetDetails.bevel=BEVELNONE;
hrs.back().gadget->gadgetDetails.buttonTile=false;
hrs.back().gadget->gadgetDetails.colour=&wc->windowColourNames[NORMALCOLOUR];
multi->LFSTK_setHitRects(hrs);
hrs.clear();
//quit
multi=new LFSTK_ExpanderGadgetClass(wc,"",DIALOGMIDDLE-HALFGADGETWIDTH,sy+12,GADGETWIDTH,GADGETHITE);
multi->lockY=LOCKTOBOTTOM;
multi->liveUpdate=useliveupdate;
hrs.push_back({0,0,GADGETWIDTH,GADGETHITE,new LFSTK_buttonClass(wc,"Quit",0,0,1,1)});
hrs.back().gadget->LFSTK_setMouseCallBack(NULL,doQuit,NULL);
internalsy+=YSPACING;
multi->LFSTK_setHitRects(hrs);
hrs.clear();
sy+=YSPACING+14;
wc->LFSTK_resizeWindow(DIALOGWIDTH,sy,true);
printf("Number of gadgets in window=%i\n",wc->LFSTK_gadgetCount());
//apc->LFSTK_setTimer(1,true);
int retval=apc->LFSTK_runApp();
delete apc;
return(retval);
}