add shell menu btns, add manual
authorGood Guy <good1.2guy@gmail.com>
Fri, 7 Aug 2015 00:18:31 +0000 (18:18 -0600)
committerGood Guy <good1.2guy@gmail.com>
Fri, 7 Aug 2015 00:18:31 +0000 (18:18 -0600)
24 files changed:
cinelerra-5.0/build/Makefile.cinelerra
cinelerra-5.0/cinelerra/Makefile
cinelerra-5.0/cinelerra/data/shbtn_dn.png [new file with mode: 0644]
cinelerra-5.0/cinelerra/data/shbtn_dn_png.h [new file with mode: 0644]
cinelerra-5.0/cinelerra/data/shbtn_hi.png [new file with mode: 0644]
cinelerra-5.0/cinelerra/data/shbtn_hi_png.h [new file with mode: 0644]
cinelerra-5.0/cinelerra/data/shbtn_up.png [new file with mode: 0644]
cinelerra-5.0/cinelerra/data/shbtn_up_png.h [new file with mode: 0644]
cinelerra-5.0/cinelerra/interfaceprefs.C
cinelerra-5.0/cinelerra/interfaceprefs.h
cinelerra-5.0/cinelerra/main.C
cinelerra-5.0/cinelerra/mainmenu.C
cinelerra-5.0/cinelerra/mainmenu.h
cinelerra-5.0/cinelerra/mwindowgui.C
cinelerra-5.0/cinelerra/mwindowgui.h
cinelerra-5.0/cinelerra/preferences.C
cinelerra-5.0/cinelerra/preferences.h
cinelerra-5.0/cinelerra/preferencesthread.C
cinelerra-5.0/cinelerra/shbtnprefs.C [new file with mode: 0644]
cinelerra-5.0/cinelerra/shbtnprefs.h [new file with mode: 0644]
cinelerra-5.0/cinelerra/shbtnprefs.inc [new file with mode: 0644]
cinelerra-5.0/doc/manual.pdf [new file with mode: 0644]
cinelerra-5.0/guicast/bcdialog.C
cinelerra-5.0/guicast/bcpopupmenu.C

index 3463e5772b1517154baddddcd66ce7ad2a2e812b..f2db54be99bcc8ff67cae8a65d62d4763c6c2b3e 100644 (file)
@@ -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/.
index 4798bd5a6e40e0b8edb3dea183a21da312c578a6..8fb3bcda24c0ebce0593f1cf1c7f7b7148e91f45 100644 (file)
@@ -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 (file)
index 0000000..19f4322
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 (file)
index 0000000..9575afa
--- /dev/null
@@ -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 (file)
index 0000000..f647160
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 (file)
index 0000000..64bc6dc
--- /dev/null
@@ -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 (file)
index 0000000..ff9b68f
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 (file)
index 0000000..30bf5d1
--- /dev/null
@@ -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
index 3ef53c9f1aa2025c3c12605b48809b92ab17bca4..4758a1ae38bc577b0abfd4af488f81c83dba44c4 100644 (file)
@@ -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();
+}
+
index af0dd61c54dfba4d6cb600331881e1c034df22c0..924014dcb41f296a312ef7eaeb4f95b96d8940aa 100644 (file)
@@ -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
index e13cbabe5dd830f1cc605a8624946f1e72f4b101..1df7ff000662e95091655442cfe2bb70c0664fe7 100644 (file)
@@ -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);
 
 
index 990f83f946c8dbf6b54bbe32d00157eeaa3a04a4..4912aadb38cf06ffb949a19469a36b00aa9ec5a2 100644 (file)
@@ -76,8 +76,8 @@
 #include <string.h>
 
 
-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; 
index b05ad3b7f1a06e8cb563628c42aafeff5e1f3e5d..938e07db8042cdefb2c49e469b53c628f5b8fe11 100644 (file)
@@ -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);
index 13f7247524dd3db92a2e7ae1a4a8b6954d692f18..882fe8264dd0a68970368efc6deaf00c2fe3be86 100644 (file)
@@ -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();
index 9af4772c36c6c5663dedbe04892b3f9b2f3f42c8..a850f242370b3d1b1df0aa0fb044b71bfcb324d4 100644 (file)
 #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;
index dda8cc23873dc3ea00465da148b8cddc5840592c..dbee6ccf292e6e845bd81f76e7e78f01b13ced65 100644 (file)
@@ -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; i<that->shbtn_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; i<shbtns_total; ++i ) {
+               char name[BCTEXTLEN], commands[BCTEXTLEN];
+               sprintf(string, "SHBTN%d_NAME", i);
+               defaults->get(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; i<shbtn_prefs.size(); ++i ) {
+               ShBtnPref *pref = shbtn_prefs[i];
+               sprintf(string, "SHBTN%d_NAME", i);
+               defaults->update(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;
 }
 
index fbcc690584f99fad72bd726d04231cedb97e9fe5..30ff9242dbe8bb092f6906d49337dde22cbbb848 100644 (file)
@@ -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<ShBtnPref *> shbtn_prefs;
 
 // ====================================== Plugin Set ==============================
        char plugin_dir[BCTEXTLEN];
index b52b3594f8f0767771727cb2c065e0a6f8268d3f..867898b49f84cf6aafb0f61c1054853a548cbd95 100644 (file)
@@ -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 (file)
index 0000000..54d71ac
--- /dev/null
@@ -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 <sys/wait.h>
+
+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; i<preferences->shbtn_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; i<preferences->shbtn_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; i<preferences->shbtn_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 (file)
index 0000000..f7fbbd1
--- /dev/null
@@ -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<BC_ListBoxItem *> 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 (file)
index 0000000..1ce4093
--- /dev/null
@@ -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 (file)
index 0000000..3f8dd3b
Binary files /dev/null and b/cinelerra-5.0/doc/manual.pdf differ
index b3501477c89bce374dcf01647147ceca1aff96fc..5297ba02722684bd8b7ea86da984eb6e4216feac 100644 (file)
@@ -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();
 }
 
 
index 486c0f5022611c7d9848a6b043725d0cdba9fa74..59688e6cbbf3124604d469a88945620c590fdd5f 100644 (file)
@@ -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;