From: Good Guy Date: Fri, 7 Aug 2015 00:18:31 +0000 (-0600) Subject: add shell menu btns, add manual X-Git-Url: https://git.cinelerra-gg.org/git/?a=commitdiff_plain;h=8596efc40093b9581099e7c72d8be3857e390242;p=goodguy%2Fhistory.git add shell menu btns, add manual --- diff --git a/cinelerra-5.0/build/Makefile.cinelerra b/cinelerra-5.0/build/Makefile.cinelerra index 3463e577..f2db54be 100644 --- a/cinelerra-5.0/build/Makefile.cinelerra +++ b/cinelerra-5.0/build/Makefile.cinelerra @@ -71,6 +71,7 @@ endif cd bin && find -name '.svn' -exec rm -r {} \; -prune rm -f bin/cutads cp -a cinelerra/$(OBJDIR)/cutads bin/. + cp -a doc/manual.pdf bin/. rm -f bin/new_db $(MAKE) -C db/utils new_db cp -a db/utils/new_db bin/. diff --git a/cinelerra-5.0/cinelerra/Makefile b/cinelerra-5.0/cinelerra/Makefile index 4798bd5a..8fb3bcda 100644 --- a/cinelerra-5.0/cinelerra/Makefile +++ b/cinelerra-5.0/cinelerra/Makefile @@ -324,6 +324,7 @@ OBJS = \ $(OBJDIR)/strack.o \ $(OBJDIR)/swindow.o \ $(OBJDIR)/wwindow.o \ + $(OBJDIR)/shbtnprefs.o \ # $(OBJDIR)/renderfarmfsclient.o \ # $(OBJDIR)/renderfarmfsserver.o \ diff --git a/cinelerra-5.0/cinelerra/data/shbtn_dn.png b/cinelerra-5.0/cinelerra/data/shbtn_dn.png new file mode 100644 index 00000000..19f4322e Binary files /dev/null and b/cinelerra-5.0/cinelerra/data/shbtn_dn.png differ diff --git a/cinelerra-5.0/cinelerra/data/shbtn_dn_png.h b/cinelerra-5.0/cinelerra/data/shbtn_dn_png.h new file mode 100644 index 00000000..9575afa1 --- /dev/null +++ b/cinelerra-5.0/cinelerra/data/shbtn_dn_png.h @@ -0,0 +1,64 @@ +#ifndef SHBTN_DN_PNG_H +#define SHBTN_DN_PNG_H + +static unsigned char shbtn_dn_png[] = +{ + 0x00, 0x00, 0x03, 0x65, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x19, 0x08, 0x02, 0x00, 0x00, 0x00, 0x4b, 0x8b, 0x12, + 0x34, 0x00, 0x00, 0x00, 0x1e, 0x74, 0x45, 0x58, 0x74, 0x44, 0x61, 0x74, 0x65, 0x00, 0x54, 0x68, + 0x75, 0x20, 0x41, 0x75, 0x67, 0x20, 0x20, 0x36, 0x20, 0x31, 0x34, 0x3a, 0x34, 0x31, 0x3a, 0x35, + 0x35, 0x20, 0x32, 0x30, 0x31, 0x35, 0x0a, 0x1b, 0xc8, 0xd9, 0x67, 0x00, 0x00, 0x03, 0x02, 0x49, + 0x44, 0x41, 0x54, 0x38, 0x8d, 0xad, 0x94, 0xcf, 0x6b, 0x5c, 0x55, 0x14, 0xc7, 0x3f, 0xe7, 0xdc, + 0xfb, 0x32, 0xf9, 0x31, 0xd1, 0x30, 0xc4, 0xd8, 0xda, 0x68, 0xc5, 0xba, 0x72, 0xe1, 0x46, 0xd2, + 0xa2, 0x20, 0xa2, 0x0b, 0x71, 0x63, 0x2b, 0x9a, 0x2c, 0x52, 0xa7, 0x6a, 0xff, 0x81, 0xae, 0x2c, + 0x74, 0xe3, 0x3f, 0x60, 0x6d, 0x50, 0x68, 0xd0, 0x22, 0x42, 0x15, 0x8a, 0x74, 0xef, 0x4a, 0xb4, + 0x5a, 0x97, 0x8a, 0x42, 0x5d, 0x28, 0xfe, 0xc0, 0x85, 0x48, 0x7e, 0x8d, 0x43, 0x4c, 0x53, 0x93, + 0x99, 0xb9, 0xef, 0xde, 0xe3, 0x62, 0xe6, 0x4d, 0x33, 0x66, 0x12, 0x47, 0xf1, 0x2c, 0x2e, 0x97, + 0xf7, 0xde, 0xf9, 0xdc, 0xef, 0x39, 0xe7, 0xdd, 0xaf, 0xbc, 0x77, 0xe5, 0x2a, 0xff, 0x47, 0x2c, + 0xbe, 0x75, 0xc1, 0x8f, 0x8e, 0x8e, 0x02, 0x60, 0x22, 0xff, 0x89, 0x61, 0x18, 0x02, 0xa8, 0xaa, + 0x07, 0xcc, 0xf8, 0xea, 0xa7, 0xa9, 0x1f, 0x7e, 0xf1, 0x10, 0xff, 0x2d, 0x2a, 0x2b, 0x65, 0x4f, + 0x1f, 0xad, 0x57, 0xc6, 0x1a, 0x80, 0x07, 0x1a, 0x79, 0x76, 0xf9, 0xe3, 0x87, 0xd6, 0x6f, 0x8d, + 0x01, 0x88, 0x40, 0x3f, 0x85, 0x7f, 0x7b, 0x66, 0x20, 0x60, 0x06, 0x82, 0x7e, 0x57, 0x7d, 0xf2, + 0xe7, 0x0e, 0xcb, 0x8c, 0x3c, 0x66, 0x58, 0x04, 0x30, 0x41, 0xc0, 0x00, 0xe9, 0xc9, 0xb7, 0x7e, + 0x2c, 0x00, 0x5a, 0xf9, 0x48, 0x7b, 0xef, 0x8b, 0x77, 0xe9, 0x89, 0x87, 0x7f, 0xcd, 0x7c, 0xea, + 0xa7, 0x61, 0xcf, 0x08, 0xb9, 0x5e, 0xff, 0xf6, 0x70, 0xf7, 0x9c, 0x82, 0x95, 0x5a, 0x73, 0x8f, + 0x7f, 0x6f, 0x61, 0xbd, 0xd1, 0xd8, 0x9e, 0x9c, 0x9c, 0x1a, 0x90, 0xf5, 0x67, 0x33, 0xbb, 0x7e, + 0xe3, 0x5e, 0xd2, 0x76, 0xfb, 0x78, 0x2d, 0x74, 0x05, 0x90, 0x5b, 0x9b, 0x37, 0x17, 0x17, 0xce, + 0xaf, 0xad, 0xad, 0x0c, 0xc8, 0x02, 0xb0, 0x84, 0xb5, 0xda, 0xd2, 0x0a, 0x16, 0xb9, 0x88, 0x20, + 0xb2, 0xbc, 0xb4, 0x7c, 0xf1, 0xc2, 0xeb, 0xb5, 0xb5, 0x55, 0x19, 0x2c, 0x48, 0x11, 0x5a, 0x6d, + 0x84, 0x02, 0x08, 0x48, 0x2e, 0xc2, 0xc4, 0x44, 0xe5, 0xbe, 0xfb, 0x0f, 0xaf, 0xae, 0xac, 0x2c, + 0xbe, 0xf9, 0x46, 0xbd, 0x5e, 0x1b, 0x88, 0x65, 0x09, 0xc9, 0xdb, 0x1d, 0x2b, 0x74, 0x49, 0x54, + 0xd5, 0x72, 0xb9, 0x7c, 0xe6, 0xd5, 0x73, 0x0f, 0x1c, 0x79, 0x70, 0x75, 0x69, 0xf9, 0xe2, 0xc2, + 0xf9, 0x7a, 0xbd, 0xa6, 0xff, 0x10, 0x42, 0x8a, 0xb8, 0xd0, 0xa3, 0x4b, 0x24, 0xf7, 0xce, 0x79, + 0xef, 0x27, 0x27, 0xef, 0x3a, 0x73, 0xf6, 0xdc, 0x81, 0x7b, 0x0e, 0xb6, 0x71, 0x8d, 0xc6, 0xb6, + 0xdf, 0x27, 0x9c, 0xef, 0xe8, 0xea, 0xce, 0x51, 0x40, 0x25, 0x2f, 0x97, 0xc7, 0xc7, 0x47, 0x22, + 0xf0, 0xcd, 0xd7, 0x5f, 0x6e, 0xde, 0xdc, 0x54, 0xe7, 0x8e, 0x3d, 0xfa, 0xd8, 0xd4, 0xd4, 0xdd, + 0xde, 0xb9, 0xbd, 0xfa, 0x2e, 0xde, 0x61, 0xd1, 0xf9, 0xd8, 0xae, 0xd1, 0x77, 0x74, 0x69, 0xee, + 0x9d, 0x73, 0x8e, 0xcf, 0xae, 0x7d, 0x72, 0xf9, 0xd2, 0xdb, 0x21, 0x84, 0x13, 0x73, 0x73, 0x27, + 0x5f, 0x7c, 0xd9, 0xed, 0x0d, 0x02, 0xbc, 0x73, 0xa4, 0xa8, 0x1a, 0x6f, 0xff, 0xab, 0x22, 0xa8, + 0x44, 0x15, 0xa9, 0xd5, 0x6a, 0xef, 0xbf, 0xfb, 0x4e, 0x08, 0xe1, 0xf8, 0xec, 0x6c, 0xf5, 0xa5, + 0xd3, 0x2a, 0x0a, 0x98, 0x99, 0x99, 0xf5, 0x65, 0xa9, 0x2a, 0x16, 0x55, 0xd3, 0x6d, 0x5d, 0x86, + 0xa8, 0x26, 0x71, 0x1a, 0x63, 0xcc, 0xf3, 0xf8, 0xec, 0x0b, 0xb3, 0xd5, 0x53, 0xa7, 0xbb, 0x8a, + 0x3e, 0xbc, 0xf2, 0xc1, 0x17, 0x9f, 0x5f, 0xdb, 0x0d, 0x1a, 0x19, 0x19, 0x39, 0xfb, 0xda, 0x02, + 0x16, 0xb5, 0x90, 0xee, 0x01, 0x15, 0x44, 0x93, 0x13, 0x75, 0xce, 0x9d, 0x98, 0x9b, 0x9b, 0x9f, + 0x3f, 0xb5, 0xb3, 0xb4, 0x46, 0xb3, 0xb9, 0xb9, 0xb1, 0xb1, 0x9b, 0x95, 0x87, 0x20, 0x22, 0xa4, + 0x24, 0xba, 0x83, 0x85, 0xa0, 0x62, 0xa2, 0x3a, 0x7d, 0xe8, 0x50, 0xb5, 0xfa, 0x8a, 0xaa, 0xee, + 0xcc, 0x99, 0x3f, 0x59, 0x3d, 0xfe, 0xdc, 0xf3, 0xbb, 0x59, 0x82, 0x0c, 0x8f, 0x95, 0xb1, 0x28, + 0xda, 0xb9, 0x90, 0x9d, 0xfb, 0x28, 0x92, 0x2e, 0x5d, 0x1d, 0x2a, 0x0d, 0xb9, 0x1d, 0x3e, 0xd1, + 0xbd, 0xe3, 0x15, 0xa8, 0xd0, 0xcf, 0x34, 0x9a, 0x41, 0xb0, 0xa8, 0x4a, 0xef, 0x1c, 0xc5, 0x3e, + 0xfa, 0xb4, 0xc8, 0xee, 0xf1, 0x9c, 0xfe, 0x5d, 0xc7, 0xba, 0xe8, 0xd4, 0x35, 0xe4, 0x8e, 0x2e, + 0x3f, 0xfe, 0x3b, 0xcd, 0x1b, 0x90, 0xa1, 0x07, 0x90, 0x3b, 0xc1, 0x15, 0x2c, 0xa1, 0xf3, 0x6d, + 0xef, 0x6a, 0x40, 0x80, 0xba, 0xb8, 0x0d, 0x1d, 0x9b, 0x81, 0xd5, 0x0e, 0x4b, 0xcc, 0x26, 0x66, + 0x9e, 0x5a, 0x6e, 0xcc, 0x84, 0x3f, 0x8c, 0x21, 0x5c, 0x09, 0x5f, 0x22, 0x2b, 0x99, 0xcf, 0xc4, + 0x67, 0x68, 0x86, 0x2a, 0x29, 0x91, 0x02, 0x79, 0x20, 0x6f, 0x11, 0x9a, 0x84, 0x26, 0xa9, 0x09, + 0x81, 0xe1, 0x83, 0xa5, 0xe1, 0xca, 0x3a, 0xac, 0x75, 0x58, 0x43, 0x12, 0x9f, 0x39, 0xf2, 0xdb, + 0xf4, 0x68, 0x25, 0x34, 0x11, 0x45, 0x1c, 0xea, 0x50, 0x45, 0x1d, 0xea, 0x10, 0x87, 0x2a, 0x16, + 0x49, 0x89, 0xd4, 0x5e, 0xf3, 0xce, 0xde, 0x12, 0x77, 0x94, 0x5b, 0xc7, 0xa6, 0x96, 0x62, 0x2e, + 0x45, 0x8d, 0x96, 0x1e, 0x91, 0x1f, 0x8f, 0x4e, 0x8b, 0xed, 0x6b, 0xcb, 0xc5, 0xf8, 0x7a, 0xfb, + 0x66, 0x96, 0xe7, 0x85, 0xaf, 0x6e, 0x6d, 0x6d, 0xed, 0x9b, 0x3b, 0x48, 0x08, 0x90, 0x52, 0xfa, + 0x0b, 0x6b, 0xce, 0x33, 0x2d, 0x13, 0xac, 0xbb, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, + 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +#endif diff --git a/cinelerra-5.0/cinelerra/data/shbtn_hi.png b/cinelerra-5.0/cinelerra/data/shbtn_hi.png new file mode 100644 index 00000000..f6471607 Binary files /dev/null and b/cinelerra-5.0/cinelerra/data/shbtn_hi.png differ diff --git a/cinelerra-5.0/cinelerra/data/shbtn_hi_png.h b/cinelerra-5.0/cinelerra/data/shbtn_hi_png.h new file mode 100644 index 00000000..64bc6dcc --- /dev/null +++ b/cinelerra-5.0/cinelerra/data/shbtn_hi_png.h @@ -0,0 +1,63 @@ +#ifndef SHBTN_HI_PNG_H +#define SHBTN_HI_PNG_H + +static unsigned char shbtn_hi_png[] = +{ + 0x00, 0x00, 0x03, 0x59, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x19, 0x08, 0x02, 0x00, 0x00, 0x00, 0x4b, 0x8b, 0x12, + 0x34, 0x00, 0x00, 0x00, 0x1e, 0x74, 0x45, 0x58, 0x74, 0x44, 0x61, 0x74, 0x65, 0x00, 0x54, 0x68, + 0x75, 0x20, 0x41, 0x75, 0x67, 0x20, 0x20, 0x36, 0x20, 0x31, 0x34, 0x3a, 0x34, 0x31, 0x3a, 0x35, + 0x35, 0x20, 0x32, 0x30, 0x31, 0x35, 0x0a, 0x1b, 0xc8, 0xd9, 0x67, 0x00, 0x00, 0x02, 0xf6, 0x49, + 0x44, 0x41, 0x54, 0x38, 0x8d, 0xad, 0x94, 0xc1, 0x6b, 0x5c, 0x55, 0x14, 0xc6, 0x7f, 0xe7, 0xde, + 0x37, 0x13, 0x4c, 0x3b, 0x96, 0x24, 0xb8, 0x48, 0x41, 0xa4, 0x33, 0xa1, 0x05, 0x91, 0x6c, 0x6c, + 0x25, 0x74, 0xd5, 0x45, 0xc4, 0x60, 0x17, 0xee, 0x93, 0x42, 0x18, 0x04, 0x71, 0x1d, 0x5c, 0x04, + 0x61, 0xb2, 0x08, 0xe4, 0x0f, 0x70, 0x13, 0x4b, 0xfd, 0x0f, 0xec, 0xd2, 0x85, 0x10, 0xdd, 0xd9, + 0x5d, 0xe9, 0xe0, 0x22, 0x90, 0x8c, 0x21, 0x12, 0x51, 0x17, 0x99, 0x10, 0x4d, 0x4d, 0xa7, 0xcd, + 0xcc, 0xbd, 0xef, 0x1c, 0x17, 0xef, 0xcd, 0xe4, 0x85, 0xa4, 0x69, 0x2a, 0x9e, 0xcd, 0x7b, 0xef, + 0xde, 0xf7, 0x7e, 0xef, 0xfb, 0xbe, 0x7b, 0xef, 0x91, 0x95, 0x95, 0x15, 0xfe, 0x8f, 0x5a, 0x58, + 0x58, 0x48, 0xf6, 0xf7, 0xf7, 0x01, 0x10, 0xb5, 0xff, 0x82, 0x10, 0x10, 0x31, 0x33, 0x53, 0xd5, + 0x04, 0x10, 0xe1, 0xa3, 0xc9, 0xdf, 0xaf, 0x8e, 0x1e, 0xe2, 0xfd, 0xeb, 0x91, 0x8c, 0xd8, 0x0d, + 0x3f, 0xb5, 0xaa, 0xbf, 0xb6, 0xdf, 0x00, 0x12, 0x60, 0xf4, 0x72, 0xfa, 0x61, 0x6d, 0x8d, 0xf0, + 0x4f, 0x3e, 0xcf, 0xeb, 0x28, 0x1c, 0xa6, 0x32, 0x79, 0xe7, 0xab, 0xb5, 0x5b, 0x39, 0xcb, 0x3b, + 0xc3, 0xba, 0xb8, 0x24, 0x17, 0x9d, 0xa3, 0x14, 0x03, 0x04, 0x11, 0x00, 0xd3, 0xdc, 0x53, 0xf6, + 0x98, 0xcf, 0x02, 0x0c, 0x95, 0x3a, 0xd9, 0x6d, 0x92, 0x0f, 0x38, 0xff, 0x5b, 0xe7, 0xe6, 0xf3, + 0x6e, 0x02, 0x60, 0x86, 0x9c, 0x30, 0x92, 0xff, 0xe3, 0x94, 0xc1, 0xe1, 0xa1, 0xf8, 0xce, 0xa5, + 0xc7, 0x88, 0xe3, 0x04, 0x4b, 0xca, 0xdf, 0x6f, 0xde, 0x91, 0xa1, 0xab, 0x95, 0x4a, 0x65, 0x7b, + 0x7b, 0xfb, 0x82, 0xfe, 0xde, 0xba, 0x12, 0x3f, 0xbf, 0xf9, 0x04, 0x19, 0xce, 0xf5, 0x0c, 0x58, + 0x66, 0x36, 0x3e, 0x3e, 0x3e, 0x3b, 0x37, 0x57, 0x9b, 0x98, 0xb0, 0x0b, 0x17, 0xe2, 0x91, 0x72, + 0x81, 0x65, 0x40, 0x49, 0x55, 0xcd, 0x0c, 0x98, 0x9d, 0x9d, 0xad, 0xd5, 0x6a, 0x7a, 0xb1, 0x02, + 0x87, 0x2b, 0x65, 0x11, 0xf4, 0x59, 0x9a, 0xa8, 0xda, 0xce, 0xce, 0x8e, 0xaa, 0x02, 0x73, 0xf7, + 0xee, 0x5d, 0xab, 0x56, 0x2f, 0x80, 0x32, 0x70, 0xa4, 0x49, 0x96, 0x66, 0x9f, 0x25, 0x3e, 0xc6, + 0xb8, 0xbb, 0xbb, 0xfb, 0xcd, 0x83, 0x07, 0x31, 0x46, 0x60, 0x7e, 0x7e, 0xfe, 0x5a, 0xb5, 0x1a, + 0x5f, 0x55, 0x38, 0x4f, 0x28, 0x1d, 0x7b, 0x34, 0x03, 0x2d, 0x77, 0x7b, 0xbd, 0xa3, 0xa3, 0xa3, + 0x56, 0xab, 0xb5, 0xba, 0xba, 0x9a, 0xcd, 0xd5, 0xeb, 0xf5, 0x91, 0x91, 0x91, 0xa3, 0x97, 0x57, + 0xb7, 0xd7, 0x43, 0xbc, 0x59, 0xae, 0x2b, 0xc9, 0x59, 0x3e, 0x69, 0xb7, 0xf7, 0xda, 0x07, 0x02, + 0x7c, 0x7c, 0xf7, 0x6e, 0xc6, 0xda, 0xda, 0xda, 0xda, 0xd8, 0xd8, 0xe8, 0x85, 0xf0, 0xd2, 0x85, + 0x0c, 0x86, 0x77, 0x69, 0xf0, 0x98, 0x15, 0x58, 0x56, 0xea, 0x85, 0x10, 0x82, 0xd4, 0xeb, 0xf5, + 0xe9, 0xe9, 0x69, 0xe0, 0x97, 0x56, 0x6b, 0x79, 0x79, 0x39, 0xc4, 0x78, 0xce, 0x9e, 0xe8, 0x05, + 0xc3, 0x7b, 0xb3, 0x7c, 0x63, 0x25, 0x64, 0x5b, 0xda, 0x7c, 0x9a, 0xea, 0x8d, 0x1b, 0xef, 0xce, + 0xcc, 0xcc, 0x00, 0xad, 0x56, 0xab, 0xd1, 0x68, 0x64, 0xeb, 0x20, 0x22, 0xce, 0xb9, 0x33, 0x59, + 0x31, 0x8d, 0x38, 0x9f, 0x46, 0x77, 0xec, 0x11, 0x33, 0x70, 0x69, 0x8c, 0xe5, 0x72, 0x19, 0xd8, + 0xdc, 0xdc, 0x6c, 0x34, 0x1a, 0xa1, 0x6f, 0x6d, 0x71, 0x71, 0x71, 0x6a, 0x6a, 0xea, 0x4c, 0xd6, + 0x97, 0x5f, 0x7c, 0x8a, 0x38, 0xd3, 0xfc, 0x58, 0x25, 0x80, 0x9a, 0x61, 0x3e, 0xa6, 0x69, 0x08, + 0x61, 0x7d, 0x7d, 0x7d, 0x69, 0x69, 0x29, 0x14, 0x32, 0x3a, 0x7d, 0x78, 0x06, 0x95, 0xaa, 0xe2, + 0xbc, 0x46, 0x8a, 0xd9, 0x0b, 0xe6, 0x54, 0xb5, 0xd9, 0x6c, 0x36, 0x9b, 0xcd, 0x34, 0x4d, 0x8b, + 0x1f, 0x7c, 0x7d, 0xff, 0xfe, 0xb7, 0x0f, 0x1f, 0x9e, 0x06, 0x99, 0xea, 0xdf, 0x7b, 0x7b, 0xe0, + 0xcd, 0x0a, 0xba, 0xcc, 0x00, 0xff, 0xd9, 0x27, 0x87, 0x87, 0x1d, 0x45, 0x0a, 0x67, 0x3b, 0xef, + 0x04, 0x4f, 0x61, 0xeb, 0x4c, 0x5d, 0x95, 0x4b, 0x82, 0xf3, 0xd6, 0xef, 0xa2, 0x19, 0xcb, 0x50, + 0xb9, 0xfd, 0xde, 0xa0, 0x7f, 0x9d, 0x63, 0x6b, 0xd0, 0xda, 0x06, 0xbd, 0xc9, 0xa9, 0x72, 0xcc, + 0xc2, 0xa0, 0x33, 0xca, 0xdb, 0x1f, 0xa0, 0x01, 0xdb, 0x45, 0x9f, 0x82, 0xe2, 0x40, 0x8d, 0xfc, + 0x3d, 0x3d, 0x09, 0x32, 0x9c, 0x40, 0x02, 0x23, 0xe8, 0x15, 0x9e, 0xff, 0x01, 0xa3, 0x7d, 0x5d, + 0x0e, 0x7e, 0x5e, 0xe3, 0xd9, 0x23, 0xde, 0x14, 0xba, 0x90, 0x42, 0x0f, 0xcc, 0x11, 0x40, 0x21, + 0xed, 0x43, 0x3c, 0x94, 0xc0, 0x1b, 0x62, 0x94, 0xa0, 0x0c, 0x43, 0xd0, 0xee, 0xda, 0x5f, 0x13, + 0xc6, 0xf5, 0x9c, 0x75, 0x18, 0xdc, 0x8f, 0x7b, 0x93, 0x13, 0x2f, 0xfe, 0xf4, 0xc3, 0x42, 0x04, + 0x43, 0xa2, 0x61, 0x98, 0x89, 0xa8, 0x61, 0x10, 0x21, 0x01, 0xc1, 0x9c, 0x88, 0x98, 0x79, 0xc1, + 0x81, 0x40, 0xc2, 0x8b, 0x67, 0x97, 0x7f, 0xe8, 0x5c, 0xf7, 0xa2, 0x39, 0x4b, 0x5c, 0xf2, 0x5d, + 0x7a, 0x2b, 0x3d, 0x78, 0x9f, 0x83, 0x42, 0x2c, 0x72, 0x66, 0x2b, 0x2d, 0x5c, 0x04, 0x0c, 0x11, + 0x29, 0x25, 0x2e, 0x1b, 0x4a, 0xc6, 0xc6, 0xc6, 0xf2, 0x30, 0xe5, 0x9c, 0xc8, 0xcf, 0x5d, 0x0b, + 0x33, 0xc0, 0x39, 0xf7, 0x2f, 0xae, 0xae, 0x0c, 0x96, 0xa0, 0xc1, 0xbd, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +#endif diff --git a/cinelerra-5.0/cinelerra/data/shbtn_up.png b/cinelerra-5.0/cinelerra/data/shbtn_up.png new file mode 100644 index 00000000..ff9b68f5 Binary files /dev/null and b/cinelerra-5.0/cinelerra/data/shbtn_up.png differ diff --git a/cinelerra-5.0/cinelerra/data/shbtn_up_png.h b/cinelerra-5.0/cinelerra/data/shbtn_up_png.h new file mode 100644 index 00000000..30bf5d1a --- /dev/null +++ b/cinelerra-5.0/cinelerra/data/shbtn_up_png.h @@ -0,0 +1,63 @@ +#ifndef SHBTN_UP_PNG_H +#define SHBTN_UP_PNG_H + +static unsigned char shbtn_up_png[] = +{ + 0x00, 0x00, 0x03, 0x54, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x19, 0x08, 0x02, 0x00, 0x00, 0x00, 0x4b, 0x8b, 0x12, + 0x34, 0x00, 0x00, 0x00, 0x1e, 0x74, 0x45, 0x58, 0x74, 0x44, 0x61, 0x74, 0x65, 0x00, 0x54, 0x68, + 0x75, 0x20, 0x41, 0x75, 0x67, 0x20, 0x20, 0x36, 0x20, 0x31, 0x34, 0x3a, 0x34, 0x31, 0x3a, 0x35, + 0x35, 0x20, 0x32, 0x30, 0x31, 0x35, 0x0a, 0x1b, 0xc8, 0xd9, 0x67, 0x00, 0x00, 0x02, 0xf1, 0x49, + 0x44, 0x41, 0x54, 0x38, 0x8d, 0xad, 0x94, 0x4d, 0x6b, 0x1b, 0x57, 0x14, 0x86, 0xdf, 0x73, 0x3f, + 0x46, 0xa3, 0x52, 0xd7, 0x36, 0x92, 0xb5, 0x90, 0x4a, 0x37, 0x81, 0xd0, 0xd2, 0x42, 0x08, 0xc9, + 0x22, 0x5b, 0xa7, 0x24, 0xf9, 0x03, 0x86, 0x40, 0xfc, 0x03, 0x6a, 0xdc, 0x9d, 0x3f, 0xb4, 0xcf, + 0xa2, 0x8b, 0xb8, 0x7f, 0xa2, 0xa8, 0x16, 0x8e, 0xed, 0x85, 0x17, 0x21, 0x9b, 0x6c, 0x12, 0x28, + 0xa6, 0xd4, 0x98, 0x40, 0x36, 0x59, 0x78, 0x11, 0x43, 0x12, 0x19, 0x8a, 0x2a, 0xdb, 0x21, 0x92, + 0xe5, 0x48, 0x73, 0xce, 0xc9, 0x62, 0x46, 0xd2, 0xf8, 0xa3, 0x46, 0x09, 0x79, 0xb9, 0x8b, 0x99, + 0x7b, 0xe6, 0x3e, 0x73, 0xce, 0xb9, 0xf7, 0xbe, 0x34, 0x35, 0x35, 0x85, 0x2f, 0xa1, 0xb9, 0xb9, + 0x39, 0xd7, 0x6e, 0xb7, 0x01, 0xa8, 0x42, 0x3f, 0x97, 0x62, 0x08, 0xaa, 0x2a, 0x22, 0x0e, 0x00, + 0xa0, 0x37, 0x2e, 0xff, 0xf7, 0xe3, 0xa5, 0x08, 0x64, 0x3f, 0x91, 0xa3, 0x9d, 0xe3, 0xe8, 0xf1, + 0x3f, 0xb9, 0xfd, 0x56, 0x08, 0xc0, 0x01, 0x08, 0x7d, 0x34, 0x73, 0xe7, 0xe5, 0xc4, 0xd7, 0x2d, + 0xc4, 0x19, 0x02, 0x20, 0x0c, 0x9b, 0x27, 0x01, 0xfc, 0xc3, 0x1f, 0x4f, 0x2f, 0x25, 0x2c, 0x43, + 0xea, 0x5d, 0x17, 0x26, 0x4e, 0x4a, 0xa1, 0x00, 0x25, 0x8f, 0x18, 0xbc, 0x9c, 0x41, 0x24, 0x51, + 0x78, 0xdf, 0x8e, 0xe7, 0x5c, 0x2f, 0x66, 0x9e, 0xbc, 0xf8, 0xae, 0xc3, 0x26, 0xf9, 0xa2, 0xbf, + 0x5c, 0x53, 0x8b, 0x4f, 0xd7, 0x87, 0xc0, 0xf1, 0xed, 0x2b, 0xaf, 0xfb, 0xb1, 0x1e, 0xcb, 0x04, + 0xcb, 0x7f, 0x7d, 0x4f, 0x6e, 0x2c, 0x0c, 0xc3, 0x46, 0xa3, 0x31, 0x5c, 0x79, 0xf8, 0x2a, 0xd3, + 0xbd, 0x7d, 0xf5, 0x2d, 0x28, 0x9b, 0x30, 0x7a, 0xbf, 0xf5, 0xaa, 0x18, 0x19, 0x19, 0x59, 0x58, + 0x5c, 0x9c, 0x98, 0x98, 0xd0, 0x61, 0x05, 0x90, 0x05, 0x65, 0x52, 0x2c, 0x05, 0xe0, 0xe3, 0x60, + 0xa9, 0x54, 0x5a, 0x2c, 0x97, 0x0b, 0x85, 0xc2, 0x70, 0x2c, 0x01, 0x19, 0x90, 0x3f, 0xc9, 0x12, + 0xab, 0xaa, 0x87, 0x87, 0x87, 0xbb, 0xbb, 0xbb, 0xc5, 0x62, 0x71, 0x7e, 0x7e, 0x3e, 0x97, 0xcb, + 0x0d, 0x97, 0x97, 0x41, 0x72, 0xb0, 0xfa, 0x35, 0xaa, 0x53, 0x95, 0x66, 0xb3, 0xf9, 0xfb, 0xd2, + 0xd2, 0xce, 0xce, 0x4e, 0xb1, 0x54, 0x5a, 0x2c, 0x97, 0x73, 0xf9, 0xbc, 0x5c, 0x28, 0x15, 0x81, + 0xb1, 0x27, 0x58, 0x0a, 0xa8, 0xba, 0x28, 0xe2, 0x28, 0x8a, 0xea, 0xf5, 0xfa, 0xd2, 0x83, 0x07, + 0xb5, 0x5a, 0xad, 0x58, 0x2c, 0x2e, 0x2c, 0x2c, 0x84, 0x61, 0x18, 0x5d, 0x20, 0x66, 0x90, 0x85, + 0xb8, 0x78, 0x27, 0x1d, 0x00, 0x55, 0x88, 0xba, 0x56, 0xab, 0xd9, 0x6c, 0x5b, 0x00, 0xd7, 0xae, + 0x5f, 0x1f, 0x1d, 0x1d, 0x65, 0xe6, 0xcd, 0xcd, 0xcd, 0x7a, 0xbd, 0xce, 0xcc, 0xff, 0xbb, 0x91, + 0xcc, 0x20, 0x2b, 0x6c, 0x53, 0x67, 0x42, 0x21, 0x62, 0x99, 0x85, 0x19, 0x93, 0x93, 0x93, 0xb3, + 0xb3, 0xb3, 0xde, 0xfb, 0xd5, 0x87, 0x0f, 0xab, 0xd5, 0xea, 0x45, 0x20, 0x80, 0x59, 0x60, 0x0c, + 0xcb, 0x29, 0x96, 0x1a, 0x11, 0xc9, 0xe7, 0x0b, 0xbf, 0xcc, 0xcc, 0x78, 0xef, 0xd7, 0xd7, 0xd6, + 0x2a, 0x95, 0x8a, 0x88, 0x00, 0x20, 0x22, 0xa2, 0xf3, 0x8e, 0x3e, 0xc0, 0x22, 0x20, 0x2b, 0x6c, + 0x06, 0x2c, 0x05, 0x54, 0x8c, 0x88, 0x58, 0x6b, 0x9d, 0x73, 0xeb, 0xeb, 0xeb, 0x7f, 0x56, 0x2a, + 0xfd, 0x8c, 0xee, 0x4d, 0x4f, 0xff, 0x7c, 0xf3, 0xe6, 0x59, 0x50, 0xeb, 0xe8, 0xe8, 0xb7, 0xfb, + 0x65, 0x18, 0x2b, 0xac, 0x29, 0x56, 0x9c, 0x97, 0x2a, 0x33, 0xaf, 0xad, 0xae, 0xae, 0xac, 0xac, + 0xa4, 0x4b, 0xcb, 0x86, 0xe1, 0xe8, 0xd8, 0xd8, 0x59, 0x96, 0xf3, 0x5e, 0x55, 0x41, 0x46, 0x85, + 0x06, 0xbd, 0x07, 0x20, 0x62, 0x54, 0x64, 0x6f, 0x6f, 0x6f, 0x79, 0x79, 0x39, 0x2e, 0xad, 0xaf, + 0x6a, 0xb5, 0xba, 0xb1, 0xb1, 0x71, 0x96, 0xa5, 0xaa, 0xc7, 0x47, 0x4d, 0x18, 0x2b, 0x92, 0x5c, + 0xc8, 0x7e, 0xbf, 0xe8, 0xd7, 0xbb, 0xdc, 0xe9, 0xf2, 0xe0, 0x36, 0x0f, 0x6c, 0xe7, 0x00, 0x38, + 0x38, 0xb7, 0x5f, 0x81, 0x07, 0xc8, 0xaa, 0xa4, 0x6b, 0x04, 0x54, 0x69, 0xea, 0xd6, 0x49, 0xc7, + 0x3a, 0xdf, 0xc2, 0xd2, 0x16, 0x14, 0x87, 0x8d, 0x6a, 0xda, 0x27, 0x14, 0xd1, 0xfb, 0xbc, 0x86, + 0x3f, 0x91, 0x46, 0x90, 0x7f, 0xa1, 0xef, 0x00, 0x01, 0x69, 0xca, 0xb9, 0x35, 0x59, 0xd9, 0xf3, + 0x2c, 0x90, 0x02, 0x01, 0x30, 0x2e, 0xfc, 0x0d, 0xb7, 0x9e, 0x03, 0x85, 0x1e, 0x8b, 0xd0, 0xd8, + 0x7a, 0xf6, 0x6d, 0xb8, 0x9d, 0x19, 0x27, 0x7c, 0xa0, 0xe8, 0x83, 0x76, 0x8f, 0xd1, 0xe9, 0x50, + 0xd4, 0x41, 0xb7, 0x03, 0x8e, 0xa0, 0x02, 0x22, 0x58, 0x0f, 0x1f, 0xc0, 0x07, 0xf0, 0x21, 0x82, + 0x00, 0x26, 0x03, 0xca, 0xa0, 0x5d, 0x3b, 0x6e, 0xef, 0x8f, 0x0f, 0x58, 0x1d, 0xb5, 0x8f, 0x5e, + 0x95, 0xde, 0x1c, 0xed, 0x07, 0x21, 0x29, 0x43, 0xe2, 0x21, 0xe0, 0xde, 0xb3, 0x0a, 0xc8, 0xc2, + 0x18, 0x18, 0x0b, 0x6b, 0x61, 0x7a, 0x83, 0x0c, 0xde, 0xbd, 0x0f, 0xfe, 0xae, 0x17, 0x8d, 0xd5, + 0x84, 0x45, 0xc6, 0x6e, 0xcb, 0xe5, 0xad, 0xb7, 0xa7, 0xdb, 0x73, 0x9e, 0x95, 0x9e, 0x16, 0x11, + 0xac, 0x4d, 0x5a, 0xeb, 0xb2, 0xd9, 0xec, 0x60, 0xfa, 0x33, 0xa4, 0x09, 0xdf, 0x18, 0xf3, 0x11, + 0xba, 0x5e, 0x1c, 0xa5, 0xd9, 0x76, 0x8d, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82 +}; + +#endif diff --git a/cinelerra-5.0/cinelerra/interfaceprefs.C b/cinelerra-5.0/cinelerra/interfaceprefs.C index 3ef53c9f..4758a1ae 100644 --- a/cinelerra-5.0/cinelerra/interfaceprefs.C +++ b/cinelerra-5.0/cinelerra/interfaceprefs.C @@ -28,6 +28,7 @@ #include "preferences.h" #include "preferencesthread.h" #include "interfaceprefs.h" +#include "shbtnprefs.h" #include "theme.h" #if 0 @@ -45,8 +46,37 @@ N_("No effect") InterfacePrefs::InterfacePrefs(MWindow *mwindow, PreferencesWindow *pwindow) : PreferencesDialog(mwindow, pwindow) { + hms = 0; + hmsf = 0; + samples = 0; + frames = 0; + hex = 0; + feet = 0; + min_db = 0; + max_db = 0; +// vu_db = 0; +// vu_int = 0; + thumbnails = 0; + shbtn_dialog = 0; } +InterfacePrefs::~InterfacePrefs() +{ + delete hms; + delete hmsf; + delete samples; + delete frames; + delete hex; + delete feet; + delete min_db; + delete max_db; +// delete vu_db; +// delete vu_int; + delete thumbnails; + delete shbtn_dialog; +} + + void InterfacePrefs::create_objects() { int x, y; @@ -154,7 +184,7 @@ void InterfacePrefs::create_objects() add_subwindow(thumbnails = new ViewThumbnails(x, y, pwindow)); - int x2 = x + 320, y2 = y; + int x2 = x + 400, y2 = y; AndroidRemote *android_remote = new AndroidRemote(pwindow, x2, y2); add_subwindow(android_remote); y2 += android_remote->get_h() + 10; @@ -167,6 +197,9 @@ void InterfacePrefs::create_objects() AndroidPIN *android_pin = new AndroidPIN(pwindow, x3, y2); add_subwindow(android_pin); + y2 += title->get_h() + 30; + add_subwindow(new ShBtnPrefs(pwindow, this, x2, y2)); + y += 35; add_subwindow(new BC_Title(x, y, _("Clicking on edit boundaries does what:"))); y += 25; @@ -254,22 +287,6 @@ int InterfacePrefs::update(int new_value) return 0; } -InterfacePrefs::~InterfacePrefs() -{ - delete hms; - delete hmsf; - delete samples; - delete frames; - delete hex; - delete feet; - delete min_db; - delete max_db; -// delete vu_db; -// delete vu_int; - delete thumbnails; -} - - @@ -687,7 +704,6 @@ int AndroidRemote::handle_event() return 1; } - AndroidPIN::AndroidPIN(PreferencesWindow *pwindow, int x, int y) : BC_TextBox(x, y, 240, 1, pwindow->thread->preferences->android_pin) { @@ -720,3 +736,24 @@ int AndroidPort::handle_event() return 1; } +int InterfacePrefs::start_shbtn_dialog() +{ + if( !shbtn_dialog ) + shbtn_dialog = new ShBtnEditDialog(pwindow); + shbtn_dialog->start(); + return 1; +} + +ShBtnPrefs::ShBtnPrefs(PreferencesWindow *pwindow, InterfacePrefs *iface_prefs, int x, int y) + : BC_GenericButton(x, y, _("Shell Commands")) +{ + this->pwindow = pwindow; + this->iface_prefs = iface_prefs; + set_tooltip(_("Main Menu Shell Commands")); +} + +int ShBtnPrefs::handle_event() +{ + return iface_prefs->start_shbtn_dialog(); +} + diff --git a/cinelerra-5.0/cinelerra/interfaceprefs.h b/cinelerra-5.0/cinelerra/interfaceprefs.h index af0dd61c..924014dc 100644 --- a/cinelerra-5.0/cinelerra/interfaceprefs.h +++ b/cinelerra-5.0/cinelerra/interfaceprefs.h @@ -43,6 +43,7 @@ class ViewThumbnails; #include "deleteallindexes.inc" #include "mwindow.inc" #include "preferencesthread.h" +#include "shbtnprefs.inc" class InterfacePrefs : public PreferencesDialog @@ -55,6 +56,7 @@ public: // must delete each derived class int update(int new_value); const char* behavior_to_text(int mode); + int start_shbtn_dialog(); BrowseButton *ipath; IndexSize *isize; @@ -76,6 +78,7 @@ public: // MeterVUInt *vu_int; ViewBehaviourText *button1, *button2, *button3; ViewThumbnails *thumbnails; + ShBtnEditDialog *shbtn_dialog; }; @@ -316,4 +319,14 @@ public: AndroidPort(PreferencesWindow *pwindow, int x, int y); }; +class ShBtnPrefs : public BC_GenericButton +{ +public: + PreferencesWindow *pwindow; + InterfacePrefs *iface_prefs; + + int handle_event(); + ShBtnPrefs(PreferencesWindow *pwindow, InterfacePrefs *iface_prefs, int x, int y); +}; + #endif diff --git a/cinelerra-5.0/cinelerra/main.C b/cinelerra-5.0/cinelerra/main.C index e13cbabe..1df7ff00 100644 --- a/cinelerra-5.0/cinelerra/main.C +++ b/cinelerra-5.0/cinelerra/main.C @@ -125,6 +125,7 @@ int main(int argc, char *argv[]) char batch_path[BCTEXTLEN]; char locale_path[BCTEXTLEN]; char exe_path[BCTEXTLEN]; + char env_path[BCTEXTLEN]; int nice_value = 20; int start_remote_control = 0; config_path[0] = 0; @@ -134,6 +135,8 @@ int main(int argc, char *argv[]) get_exe_path(exe_path); + snprintf(env_path, sizeof(env_path), "CINELERRA_PATH=%s", exe_path); + putenv(env_path); sprintf(locale_path, "%s%s", exe_path, LOCALEDIR); diff --git a/cinelerra-5.0/cinelerra/mainmenu.C b/cinelerra-5.0/cinelerra/mainmenu.C index 990f83f9..4912aadb 100644 --- a/cinelerra-5.0/cinelerra/mainmenu.C +++ b/cinelerra-5.0/cinelerra/mainmenu.C @@ -76,8 +76,8 @@ #include -MainMenu::MainMenu(MWindow *mwindow, MWindowGUI *gui) - : BC_MenuBar(0, 0, gui->get_w()) +MainMenu::MainMenu(MWindow *mwindow, MWindowGUI *gui, int w) + : BC_MenuBar(0, 0, w) { this->gui = gui; this->mwindow = mwindow; diff --git a/cinelerra-5.0/cinelerra/mainmenu.h b/cinelerra-5.0/cinelerra/mainmenu.h index b05ad3b7..938e07db 100644 --- a/cinelerra-5.0/cinelerra/mainmenu.h +++ b/cinelerra-5.0/cinelerra/mainmenu.h @@ -66,7 +66,7 @@ class SplitY; class MainMenu : public BC_MenuBar { public: - MainMenu(MWindow *mwindow, MWindowGUI *gui); + MainMenu(MWindow *mwindow, MWindowGUI *gui, int w); ~MainMenu(); void create_objects(); int load_defaults(BC_Hash *defaults); diff --git a/cinelerra-5.0/cinelerra/mwindowgui.C b/cinelerra-5.0/cinelerra/mwindowgui.C index 13f72475..882fe826 100644 --- a/cinelerra-5.0/cinelerra/mwindowgui.C +++ b/cinelerra-5.0/cinelerra/mwindowgui.C @@ -58,8 +58,9 @@ #include "renderengine.h" #include "resourcethread.h" #include "samplescroll.h" -#include "swindow.h" +#include "shbtnprefs.h" #include "statusbar.h" +#include "swindow.h" #include "theme.h" #include "trackcanvas.h" #include "trackscroll.h" @@ -258,7 +259,10 @@ void MWindowGUI::create_objects() if(debug) printf("MWindowGUI::create_objects %d\n", __LINE__); - add_subwindow(mainmenu = new MainMenu(mwindow, this)); + int x = get_w() - MainShBtns::calculate_w(1); + add_subwindow(mainmenu = new MainMenu(mwindow, this, x)); + add_subwindow(mainshbtns = new MainShBtns(mwindow, x, 0)); + mainshbtns->load(mwindow->preferences); mwindow->theme->get_mwindow_sizes(this, get_w(), get_h()); mwindow->theme->draw_mwindow_bg(this); mainmenu->create_objects(); diff --git a/cinelerra-5.0/cinelerra/mwindowgui.h b/cinelerra-5.0/cinelerra/mwindowgui.h index 9af4772c..a850f242 100644 --- a/cinelerra-5.0/cinelerra/mwindowgui.h +++ b/cinelerra-5.0/cinelerra/mwindowgui.h @@ -47,9 +47,10 @@ #include "resourcepixmap.h" #include "resourcethread.inc" #include "samplescroll.inc" +#include "shbtnprefs.inc" #include "statusbar.inc" -#include "timelinepane.inc" #include "swindow.inc" +#include "timelinepane.inc" #include "trackcanvas.inc" #include "trackscroll.inc" #include "transitionpopup.inc" @@ -190,6 +191,7 @@ public: MainMenu *mainmenu; + MainShBtns *mainshbtns; ZoomBar *zoombar; StatusBar *statusbar; PaneButton *pane_button; diff --git a/cinelerra-5.0/cinelerra/preferences.C b/cinelerra-5.0/cinelerra/preferences.C index dda8cc23..dbee6ccf 100644 --- a/cinelerra-5.0/cinelerra/preferences.C +++ b/cinelerra-5.0/cinelerra/preferences.C @@ -33,6 +33,7 @@ #include "indexfile.h" #include "mutex.h" #include "preferences.h" +#include "shbtnprefs.h" #include "theme.h" #include "videoconfig.h" #include "videodevice.inc" @@ -180,6 +181,9 @@ void Preferences::copy_from(Preferences *that) android_remote = that->android_remote; android_port = that->android_port; strcpy(android_pin, that->android_pin); + this->shbtn_prefs.remove_all_objects(); + for( int i=0; ishbtn_prefs.size(); ++i ) + this->shbtn_prefs.append(new ShBtnPref(*that->shbtn_prefs[i])); cache_size = that->cache_size; force_uniprocessor = that->force_uniprocessor; trap_sigsegv = that->trap_sigsegv; @@ -381,6 +385,24 @@ int Preferences::load_defaults(BC_Hash *defaults) } } + shbtn_prefs.remove_all_objects(); + int shbtns_total = defaults->get("SHBTNS_TOTAL", -1); + if( shbtns_total < 0 ) { + shbtn_prefs.append(new ShBtnPref("manual", "firefox file:///$CINELERRA_PATH/manual.pdf", 0)); + shbtn_prefs.append(new ShBtnPref("online help", "firefox http://cinelerra.org/help.php/", 0)); + shbtns_total = 0; + } + for( int i=0; iget(string, name); + sprintf(string, "SHBTN%d_COMMANDS", i); + defaults->get(string, commands); + sprintf(string, "SHBTN%d_WARN", i); + int warn = defaults->get(string, 0); + shbtn_prefs.append(new ShBtnPref(name, commands, warn)); + } + // Redo with the proper value of force_uniprocessor processors = calculate_processors(0); boundaries(); @@ -451,6 +473,16 @@ int Preferences::save_defaults(BC_Hash *defaults) sprintf(string, "RENDERFARM_RATE%d", i); defaults->update(string, renderfarm_rate.values[i]); } + defaults->update("SHBTNS_TOTAL", shbtn_prefs.size()); + for( int i=0; iupdate(string, pref->name); + sprintf(string, "SHBTN%d_COMMANDS", i); + defaults->update(string, pref->commands); + sprintf(string, "SHBTN%d_WARN", i); + defaults->update(string, pref->warn); + } return 0; } diff --git a/cinelerra-5.0/cinelerra/preferences.h b/cinelerra-5.0/cinelerra/preferences.h index fbcc6905..30ff9242 100644 --- a/cinelerra-5.0/cinelerra/preferences.h +++ b/cinelerra-5.0/cinelerra/preferences.h @@ -29,6 +29,7 @@ #include "maxchannels.h" #include "mutex.inc" #include "preferences.inc" +#include "shbtnprefs.inc" #include "videoconfig.inc" @@ -139,6 +140,8 @@ public: int android_remote; int android_port; char android_pin[BCSTRLEN]; +// shell cmd line menu ops + ArrayList shbtn_prefs; // ====================================== Plugin Set ============================== char plugin_dir[BCTEXTLEN]; diff --git a/cinelerra-5.0/cinelerra/preferencesthread.C b/cinelerra-5.0/cinelerra/preferencesthread.C index b52b3594..867898b4 100644 --- a/cinelerra-5.0/cinelerra/preferencesthread.C +++ b/cinelerra-5.0/cinelerra/preferencesthread.C @@ -49,6 +49,7 @@ #include "playbackprefs.h" #include "preferences.h" #include "recordprefs.h" +#include "shbtnprefs.h" #include "theme.h" #include "trackcanvas.h" #include "transportque.h" @@ -210,6 +211,7 @@ int PreferencesThread::apply_settings() mwindow->reset_android_remote(); mwindow->gui->mbuttons->ffmpeg_toggle->update(mwindow->preferences->ffmpeg_early_probe); + mwindow->gui->mainshbtns->load(mwindow->preferences); //edl->session->recording_format->dump(); //mwindow->edl->session->recording_format->dump(); diff --git a/cinelerra-5.0/cinelerra/shbtnprefs.C b/cinelerra-5.0/cinelerra/shbtnprefs.C new file mode 100644 index 00000000..54d71acd --- /dev/null +++ b/cinelerra-5.0/cinelerra/shbtnprefs.C @@ -0,0 +1,359 @@ +#include "bcwindowbase.h" +#include "bcdisplayinfo.h" +#include "bcdialog.h" +#include "language.h" +#include "mainerror.h" +#include "shbtnprefs.h" +#include "preferences.h" +#include "preferencesthread.h" + +#include + +ShBtnRun::ShBtnRun(const char *nm, const char *cmds, int warn) + : Thread(0, 0, 1) +{ + strncpy(name, nm, sizeof(name)-1); + name[sizeof(name)-1] = 0; + strncpy(commands, cmds, sizeof(commands)-1); + commands[sizeof(commands)-1] = 0; + this->warn = warn; + start(); +} + +void ShBtnRun::run() +{ + pid_t pid = vfork(); + if( pid < 0 ) { + perror("fork"); + return; + } + if( pid > 0 ) { + int stat; waitpid(pid, &stat, 0); + if( warn && stat ) { + char msg[BCTEXTLEN]; + sprintf(msg, "%s: error exit status %d", name, stat); + MainError::show_error(msg); + } + return; + } + char *const argv[4] = { (char*) "/bin/bash", (char*) "-c", commands, 0 }; + execvp(argv[0], &argv[0]); +} + +ShBtnPref::ShBtnPref(const char *nm, const char *cmds, int warn) +{ + strncpy(name, nm, sizeof(name)); + strncpy(commands, cmds, sizeof(commands)); + this->warn = warn; +} + +ShBtnPref::~ShBtnPref() +{ +} + +void ShBtnPref::execute() +{ + new ShBtnRun(name, commands, warn); +} + +ShBtnEditDialog::ShBtnEditDialog(PreferencesWindow *pwindow) + : BC_DialogThread() +{ + this->pwindow = pwindow; +} + +ShBtnEditDialog::~ShBtnEditDialog() +{ + close_window(); +} + +BC_Window* ShBtnEditDialog::new_gui() +{ + BC_DisplayInfo display_info; + int x = display_info.get_abs_cursor_x(); + int y = display_info.get_abs_cursor_y(); + + sb_window = new ShBtnEditWindow(this, x, y); + sb_window->create_objects(); + return sb_window; +} + +void ShBtnEditDialog::handle_close_event(int result) +{ + sb_window = 0; +} + + +ShBtnEditWindow::ShBtnEditWindow(ShBtnEditDialog *shbtn_edit, int x, int y) + : BC_Window(_(PROGRAM_NAME ": Shell"), x, y, 300, 200, 300, 200, 0, 0, 1) +{ + this->shbtn_edit = shbtn_edit; + sb_dialog = 0; +} + +ShBtnEditWindow::~ShBtnEditWindow() +{ + delete sb_dialog; +} + +int ShBtnEditWindow::list_update() +{ + shbtn_items.remove_all_objects(); + Preferences *preferences = shbtn_edit->pwindow->thread->preferences; + for( int i=0; ishbtn_prefs.size(); ++i ) { + shbtn_items.append(new ShBtnPrefItem(preferences->shbtn_prefs[i])); + } + return op_list->update(&shbtn_items, 0, 0, 1); +} + +ShBtnAddButton::ShBtnAddButton(ShBtnEditWindow *sb_window, int x, int y) + : BC_GenericButton(x, y, _("Add")) +{ + this->sb_window = sb_window; +} + +ShBtnAddButton::~ShBtnAddButton() +{ +} + +int ShBtnAddButton::handle_event() +{ + + Preferences *preferences = sb_window->shbtn_edit->pwindow->thread->preferences; + ShBtnPref *pref = new ShBtnPref(_("new"), "", 0); + preferences->shbtn_prefs.append(pref); + sb_window->list_update(); + return sb_window->start_edit(pref); +} + +ShBtnDelButton::ShBtnDelButton(ShBtnEditWindow *sb_window, int x, int y) + : BC_GenericButton(x, y, _("Del")) +{ + this->sb_window = sb_window; +} + +ShBtnDelButton::~ShBtnDelButton() +{ +} + +int ShBtnDelButton::handle_event() +{ + ShBtnPrefItem *sp = (ShBtnPrefItem *)sb_window->op_list->get_selection(0,0); + if( !sp ) return 0; + Preferences *preferences = sb_window->shbtn_edit->pwindow->thread->preferences; + preferences->shbtn_prefs.remove(sp->pref); + sb_window->list_update(); + return 1; +} + +ShBtnEditButton::ShBtnEditButton(ShBtnEditWindow *sb_window, int x, int y) + : BC_GenericButton(x, y, _("Edit")) +{ + this->sb_window = sb_window; +} + +ShBtnEditButton::~ShBtnEditButton() +{ +} + +int ShBtnEditButton::handle_event() +{ + ShBtnPrefItem *sp = (ShBtnPrefItem *)sb_window->op_list->get_selection(0,0); + if( !sp ) return 0; + return sb_window->start_edit(sp->pref); +} + +ShBtnTextDialog::ShBtnTextDialog(ShBtnEditWindow *sb_window) + : BC_DialogThread() +{ + this->sb_window = sb_window; + this->pref = 0; +} + +ShBtnTextDialog::~ShBtnTextDialog() +{ + close_window(); +} + +ShBtnTextWindow::ShBtnTextWindow(ShBtnEditWindow *sb_window, int x, int y) + : BC_Window(_(PROGRAM_NAME ": Commands"), x, y, 640, 160, 640, 150, 0, 0, 1) +{ + this->sb_window = sb_window; + warn = sb_window->sb_dialog->pref->warn; +} + +ShBtnTextWindow::~ShBtnTextWindow() +{ +} + +ShBtnErrWarn::ShBtnErrWarn(ShBtnTextWindow *st_window, int x, int y) + : BC_CheckBox(x, y, &st_window->warn, "Warn on err exit") +{ + this->st_window = st_window; +} + +ShBtnErrWarn::~ShBtnErrWarn() +{ +} + +void ShBtnTextWindow::create_objects() +{ + int x = 10, y = 10; + int x1 = 160; + BC_Title *title = new BC_Title(x, y, _("Label:")); + add_subwindow(title); + title = new BC_Title(x1, y, _("Commands:")); + add_subwindow(title); + y += title->get_h() + 8; + ShBtnPref *pref = sb_window->sb_dialog->pref; + cmd_name = new BC_TextBox(x, y, 140, 1, pref->name); + add_subwindow(cmd_name); + cmd_text = new BC_ScrollTextBox(this, x1, y, get_w()-x1-20, 4, pref->commands); + cmd_text->create_objects(); + y += cmd_text->get_h() + 8; + add_subwindow(st_err_warn = new ShBtnErrWarn(this, x1, y)); + y = get_h() - ShBtnTextOK::calculate_h() - 10; + add_subwindow(new ShBtnTextOK(this, x, y)); + show_window(); +} + +ShBtnTextOK::ShBtnTextOK(ShBtnTextWindow *st_window, int x, int y) + : BC_OKButton(x, y) +{ + this->st_window = st_window; +} + +ShBtnTextOK::~ShBtnTextOK() +{ +} + +int ShBtnTextOK::handle_event() +{ + ShBtnPref *pref = st_window->sb_window->sb_dialog->pref; + strcpy(pref->name, st_window->cmd_name->get_text()); + strcpy(pref->commands, st_window->cmd_text->get_text()); + pref->warn = st_window->warn; + return BC_OKButton::handle_event(); +} + + +BC_Window *ShBtnTextDialog::new_gui() +{ + BC_DisplayInfo display_info; + int x = display_info.get_abs_cursor_x(); + int y = display_info.get_abs_cursor_y(); + + st_window = new ShBtnTextWindow(sb_window, x, y); + st_window->create_objects(); + return st_window; +} + +void ShBtnTextDialog::handle_close_event(int result) +{ + if( !result ) { + sb_window->list_update(); + } + st_window = 0; +} + +int ShBtnTextDialog::start_edit(ShBtnPref *pref) +{ + this->pref = pref; + start(); + return 1; +} + +void ShBtnEditWindow::create_objects() +{ + Preferences *preferences = shbtn_edit->pwindow->thread->preferences; + for( int i=0; ishbtn_prefs.size(); ++i ) { + shbtn_items.append(new ShBtnPrefItem(preferences->shbtn_prefs[i])); + } + int x = 10, y = 10; + add_subwindow(op_list = new ShBtnPrefList(this, x, y)); + x = 190; + add_subwindow(add_button = new ShBtnAddButton(this, x, y)); + y += add_button->get_h() + 8; + add_subwindow(del_button = new ShBtnDelButton(this, x, y)); + y += del_button->get_h() + 8; + add_subwindow(edit_button = new ShBtnEditButton(this, x, y)); + add_subwindow(new BC_OKButton(this)); + show_window(); +} + +int ShBtnEditWindow::start_edit(ShBtnPref *pref) +{ + if( !sb_dialog ) + sb_dialog = new ShBtnTextDialog(this); + return sb_dialog->start_edit(pref); +} + + +ShBtnPrefItem::ShBtnPrefItem(ShBtnPref *pref) + : BC_ListBoxItem(pref->name) +{ + this->pref = pref; +} + +ShBtnPrefItem::~ShBtnPrefItem() +{ +} + +ShBtnPrefList::ShBtnPrefList(ShBtnEditWindow *sb_window, int x, int y) + : BC_ListBox(x, y, 140, 100, LISTBOX_TEXT, &sb_window->shbtn_items, 0, 0) +{ + this->sb_window = sb_window; +} + +ShBtnPrefList::~ShBtnPrefList() +{ +} + +int ShBtnPrefList::handle_event() +{ + return 1; +} + +MainShBtnItem::MainShBtnItem(MainShBtns *shbtns, ShBtnPref *pref) + : BC_MenuItem(pref->name) +{ + this->shbtns = shbtns; + this->pref = pref; +} + +int MainShBtnItem::handle_event() +{ + pref->execute(); + return 1; +} + +#include "data/shbtn_up_png.h" +#include "data/shbtn_hi_png.h" +#include "data/shbtn_dn_png.h" + +static VFrame *shbtn_images[] = { + new VFrame(shbtn_up_png), + new VFrame(shbtn_hi_png), + new VFrame(shbtn_dn_png), +}; + +MainShBtns::MainShBtns(MWindow *mwindow, int x, int y) + : BC_PopupMenu(x, y, 32, "", 1, shbtn_images) +{ + this->mwindow = mwindow; + set_tooltip(_("shell cmds")); +} + +int MainShBtns::load(Preferences *preferences) +{ + while( total_items() ) remove_item(get_item(0)); + for( int i=0; ishbtn_prefs.size(); ++i ) + add_item(new MainShBtnItem(this, preferences->shbtn_prefs[i])); + return 0; +} + +int MainShBtns::handle_event() +{ + return 1; +} + diff --git a/cinelerra-5.0/cinelerra/shbtnprefs.h b/cinelerra-5.0/cinelerra/shbtnprefs.h new file mode 100644 index 00000000..f7fbbd1d --- /dev/null +++ b/cinelerra-5.0/cinelerra/shbtnprefs.h @@ -0,0 +1,187 @@ +#ifndef __SHBTNPREFS_H__ +#define __SHBTNPREFS_H__ + +#include "bcwindowbase.h" +#include "bcbutton.h" +#include "bcdialog.h" +#include "bclistbox.h" +#include "bclistboxitem.h" +#include "preferences.inc" +#include "preferencesthread.inc" +#include "thread.h" +#include "shbtnprefs.inc" + + +class ShBtnRun : public Thread +{ +public: + int warn; + char name[BCSTRLEN]; + char commands[BCTEXTLEN]; + + ShBtnRun(const char *name, const char *cmds, int warn=0); + void run(); +}; + +class ShBtnPref +{ +public: + char name[BCSTRLEN]; + char commands[BCTEXTLEN]; + int warn; + void execute(); + + ShBtnPref(const char *nm, const char *cmds, int warn); + ~ShBtnPref(); +}; + +class ShBtnEditDialog : public BC_DialogThread +{ +public: + PreferencesWindow *pwindow; + + ShBtnEditWindow *sb_window; + BC_Window* new_gui(); + void handle_close_event(int result); + + ShBtnEditDialog(PreferencesWindow *pwindow); + ~ShBtnEditDialog(); +}; + + +class ShBtnAddButton : public BC_GenericButton { +public: + ShBtnEditWindow *sb_window; + int handle_event(); + + ShBtnAddButton(ShBtnEditWindow *sb_window, int x, int y); + ~ShBtnAddButton(); +}; + +class ShBtnDelButton : public BC_GenericButton { +public: + ShBtnEditWindow *sb_window; + int handle_event(); + + ShBtnDelButton(ShBtnEditWindow *sb_window, int x, int y); + ~ShBtnDelButton(); +}; + +class ShBtnEditButton : public BC_GenericButton { +public: + ShBtnEditWindow *sb_window; + + int handle_event(); + + ShBtnEditButton(ShBtnEditWindow *sb_window, int x, int y); + ~ShBtnEditButton(); +}; + +class ShBtnTextDialog : public BC_DialogThread +{ +public: + ShBtnEditWindow *sb_window; + ShBtnTextWindow *st_window; + ShBtnPref *pref; + + BC_Window* new_gui(); + void handle_close_event(int result); + int start_edit(ShBtnPref *pref); + + ShBtnTextDialog(ShBtnEditWindow *sb_window); + ~ShBtnTextDialog(); +}; + +class ShBtnTextOK : public BC_OKButton +{ +public: + ShBtnTextWindow *st_window; + int handle_event(); + + ShBtnTextOK(ShBtnTextWindow *st_window, int x, int y); + ~ShBtnTextOK(); +}; + +class ShBtnErrWarn : public BC_CheckBox +{ +public: + ShBtnErrWarn(ShBtnTextWindow *st_window, int x, int y); + ~ShBtnErrWarn(); + + ShBtnTextWindow *st_window; +}; + +class ShBtnTextWindow : public BC_Window +{ +public: + BC_TextBox *cmd_name; + BC_ScrollTextBox *cmd_text; + ShBtnEditWindow *sb_window; + ShBtnErrWarn *st_err_warn; + int warn; + + void create_objects(); + + ShBtnTextWindow(ShBtnEditWindow *sb_window, int x, int y); + ~ShBtnTextWindow(); +}; + +class ShBtnPrefItem : public BC_ListBoxItem { +public: + ShBtnPref *pref; + + ShBtnPrefItem(ShBtnPref *item); + ~ShBtnPrefItem(); +}; + +class ShBtnPrefList : public BC_ListBox +{ +public: + ShBtnEditWindow *sb_window; + int handle_event(); + + ShBtnPrefList(ShBtnEditWindow *sb_window, int x, int y); + ~ShBtnPrefList(); +}; + +class ShBtnEditWindow : public BC_Window +{ +public: + ShBtnAddButton *add_button; + ShBtnDelButton *del_button; + ShBtnEditButton *edit_button; + ShBtnTextDialog *sb_dialog; + ArrayList shbtn_items; + ShBtnPrefList *op_list; + + void create_objects(); + int list_update(); + int start_edit(ShBtnPref *pref); + + ShBtnEditWindow(ShBtnEditDialog *shbtn_edit, int x, int y); + ~ShBtnEditWindow(); + + ShBtnEditDialog *shbtn_edit; +}; + +class MainShBtnItem : public BC_MenuItem +{ +public: + MainShBtnItem(MainShBtns *shbtns, ShBtnPref *pref); + int handle_event(); + + MainShBtns *shbtns; + ShBtnPref *pref; +}; + +class MainShBtns : public BC_PopupMenu +{ +public: + MainShBtns(MWindow *mwindow, int x, int y); + int load(Preferences *preferences); + int handle_event(); + + MWindow *mwindow; +}; + +#endif diff --git a/cinelerra-5.0/cinelerra/shbtnprefs.inc b/cinelerra-5.0/cinelerra/shbtnprefs.inc new file mode 100644 index 00000000..1ce40933 --- /dev/null +++ b/cinelerra-5.0/cinelerra/shbtnprefs.inc @@ -0,0 +1,20 @@ +#ifndef __CMDLNPREFS_INC__ +#define __CMDLNPREFS_INC__ + +class ShBtnRun; +class ShBtnPref; +class ShBtnEditDialog; +class ShBtnAddButton; +class ShBtnDelButton; +class ShBtnEditButton; +class ShBtnTextDialog; +class ShBtnTextOK; +class ShBtnErrWarn; +class ShBtnTextWindow; +class ShBtnPrefItem; +class ShBtnPrefList; +class ShBtnEditWindow; +class MainShBtnItem; +class MainShBtns; + +#endif diff --git a/cinelerra-5.0/doc/manual.pdf b/cinelerra-5.0/doc/manual.pdf new file mode 100644 index 00000000..3f8dd3b0 Binary files /dev/null and b/cinelerra-5.0/doc/manual.pdf differ diff --git a/cinelerra-5.0/guicast/bcdialog.C b/cinelerra-5.0/guicast/bcdialog.C index b3501477..5297ba02 100644 --- a/cinelerra-5.0/guicast/bcdialog.C +++ b/cinelerra-5.0/guicast/bcdialog.C @@ -46,8 +46,6 @@ BC_DialogThread::~BC_DialogThread() gui->unlock_window(); } startup_lock->unlock(); - cancel(); - join(); delete startup_lock; delete window_lock; @@ -149,6 +147,7 @@ void BC_DialogThread::close_window() gui->unlock_window(); } unlock_window(); + join(); } diff --git a/cinelerra-5.0/guicast/bcpopupmenu.C b/cinelerra-5.0/guicast/bcpopupmenu.C index 486c0f50..59688e6c 100644 --- a/cinelerra-5.0/guicast/bcpopupmenu.C +++ b/cinelerra-5.0/guicast/bcpopupmenu.C @@ -74,7 +74,7 @@ BC_PopupMenu::BC_PopupMenu(int x, const char *text, int use_title, VFrame **data) - : BC_SubWindow(x, y, w, -1, -1) + : BC_SubWindow(x, y, 0, -1, -1) { highlighted = popup_down = 0; menu_popup = 0;