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);
- }
+ char msg[BCTEXTLEN];
+ if( !pid ) {
+ argv.append(0);
+ execvp(argv[0], &argv[0]);
return;
}
- argv.append(0);
- execvp(argv[0], &argv[0]);
+ // warn <0:always, =0:never, >0:on err
+ if( !warn ) return;
+ int stat; waitpid(pid, &stat, 0);
+ if( !stat ) {
+ if( warn > 0 ) return;
+ sprintf(msg, "%s: completed", name);
+ }
+ else
+ sprintf(msg, "%s: error exit status %d", name, stat);
+ MainError::show_error(msg);
}
ShBtnPref::ShBtnPref(const char *nm, const char *cmds, int warn, int run_script)
ShBtnEditWindow::ShBtnEditWindow(ShBtnEditDialog *shbtn_edit, int x, int y)
- : BC_Window(_(PROGRAM_NAME ": Shell"), x, y, 300, 200, 300, 200, 0, 0, 1)
+ : BC_Window(_(PROGRAM_NAME ": Shell"), x, y,
+ xS(300), yS(200), xS(300), yS(200), 0, 0, 1)
{
this->shbtn_edit = shbtn_edit;
sb_dialog = 0;
}
ShBtnTextWindow::ShBtnTextWindow(ShBtnEditWindow *sb_window, int x, int y)
- : BC_Window(_(PROGRAM_NAME ": Commands"), x, y, 640, 160, 640, 150, 0, 0, 1)
+ : BC_Window(_(PROGRAM_NAME ": Commands"), x, y,
+ xS(640), yS(160), xS(640), yS(150), 0, 0, 1)
{
this->sb_window = sb_window;
warn = sb_window->sb_dialog->pref->warn;
{
}
+
+ShBtnErrWarnItem::ShBtnErrWarnItem(ShBtnErrWarn *popup,
+ const char *text, int warn)
+ : BC_MenuItem(text)
+{
+ this->popup = popup;
+ this->warn = warn;
+}
+
+int ShBtnErrWarnItem::handle_event()
+{
+ popup->set_text(get_text());
+ popup->st_window->warn = warn;
+ return 1;
+}
+
ShBtnErrWarn::ShBtnErrWarn(ShBtnTextWindow *st_window, int x, int y)
- : BC_CheckBox(x, y, &st_window->warn, _("Warn on err exit"))
+ : BC_PopupMenu(x, y, xS(120), st_window->warn < 0 ? _("Always"):
+ !st_window->warn ? _("Never") : _("On Error"))
{
this->st_window = st_window;
}
-
ShBtnErrWarn::~ShBtnErrWarn()
{
}
+int ShBtnErrWarn::handle_event()
+{
+ return 0;
+}
+
+void ShBtnErrWarn::create_objects()
+{
+ add_item(new ShBtnErrWarnItem(this,_("Always"), -1));
+ add_item(new ShBtnErrWarnItem(this,_("Never"), 0));
+ add_item(new ShBtnErrWarnItem(this,_("On Error"), 1));
+}
+
ShBtnRunScript::ShBtnRunScript(ShBtnTextWindow *st_window, int x, int y)
: BC_CheckBox(x, y, &st_window->run_script, _("run /path/script.sh + argvs"))
void ShBtnTextWindow::create_objects()
{
lock_window("ShBtnTextWindow::create_objects");
- int x = 10, y = 10;
- int x1 = 160;
+ int x = xS(10), y = yS(10);
+ int x1 = xS(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;
+ y += title->get_h() + yS(8);
ShBtnPref *pref = sb_window->sb_dialog->pref;
- cmd_name = new BC_TextBox(x, y, 140, 1, pref->name);
+ cmd_name = new BC_TextBox(x, y, xS(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 = new BC_ScrollTextBox(this, x1, y, get_w()-x1-xS(20), 4, pref->commands);
cmd_text->create_objects();
- y += cmd_text->get_h() + 16;
+ y += cmd_text->get_h() + yS(16);
+ add_subwindow(title = new BC_Title(x1,y, _("OnExit Notify:")));
+ x1 += title->get_w() + xS(10);
add_subwindow(st_err_warn = new ShBtnErrWarn(this, x1, y));
- x1 += st_err_warn->get_w() + 20;
+ st_err_warn->create_objects();
+ x1 += st_err_warn->get_w() + xS(20);
add_subwindow(st_run_script = new ShBtnRunScript(this, x1, y));
- y = get_h() - ShBtnTextOK::calculate_h() - 10;
+ y = get_h() - ShBtnTextOK::calculate_h() - yS(10);
add_subwindow(new ShBtnTextOK(this, x, y));
show_window();
unlock_window();
for( int i=0; i<preferences->shbtn_prefs.size(); ++i ) {
shbtn_items.append(new ShBtnPrefItem(preferences->shbtn_prefs[i]));
}
- int x = 10, y = 10;
+ int x = xS(10), y = yS(10);
add_subwindow(op_list = new ShBtnPrefList(this, x, y));
- x = 190;
+ x = xS(190);
add_subwindow(add_button = new ShBtnAddButton(this, x, y));
- y += add_button->get_h() + 8;
+ y += add_button->get_h() + yS(8);
add_subwindow(del_button = new ShBtnDelButton(this, x, y));
- y += del_button->get_h() + 8;
+ y += del_button->get_h() + yS(8);
add_subwindow(edit_button = new ShBtnEditButton(this, x, y));
add_subwindow(new BC_OKButton(this));
show_window();
}
ShBtnPrefList::ShBtnPrefList(ShBtnEditWindow *sb_window, int x, int y)
- : BC_ListBox(x, y, 140, 100, LISTBOX_TEXT, &sb_window->shbtn_items, 0, 0)
+ : BC_ListBox(x, y, xS(140), yS(100), LISTBOX_TEXT, &sb_window->shbtn_items, 0, 0)
{
this->sb_window = sb_window;
}