moved commandline parsing to its own function
This commit is contained in:
parent
e84c64f7be
commit
d3eabeb805
2 changed files with 132 additions and 86 deletions
160
src/Screen.cc
160
src/Screen.cc
|
@ -183,7 +183,7 @@ int calcSquareDistance(int x1, int y1, int x2, int y2) {
|
||||||
|
|
||||||
class TabPlacementMenuItem: public FbTk::RadioMenuItem {
|
class TabPlacementMenuItem: public FbTk::RadioMenuItem {
|
||||||
public:
|
public:
|
||||||
TabPlacementMenuItem(const FbTk::FbString & label, BScreen &screen,
|
TabPlacementMenuItem(FbTk::FbString & label, BScreen &screen,
|
||||||
FbWinFrame::TabPlacement place,
|
FbWinFrame::TabPlacement place,
|
||||||
FbTk::RefCount<FbTk::Command<void> > &cmd):
|
FbTk::RefCount<FbTk::Command<void> > &cmd):
|
||||||
FbTk::RadioMenuItem(label, cmd),
|
FbTk::RadioMenuItem(label, cmd),
|
||||||
|
@ -208,28 +208,6 @@ void clampMenuDelay(int& delay) {
|
||||||
delay = FbTk::Util::clamp(delay, 0, 5000);
|
delay = FbTk::Util::clamp(delay, 0, 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct TabPlacementString {
|
|
||||||
FbWinFrame::TabPlacement placement;
|
|
||||||
const char* str;
|
|
||||||
};
|
|
||||||
|
|
||||||
const TabPlacementString placement_strings[] = {
|
|
||||||
{ FbWinFrame::TOPLEFT, "TopLeft" },
|
|
||||||
{ FbWinFrame::TOP, "Top" },
|
|
||||||
{ FbWinFrame::TOPRIGHT, "TopRight" },
|
|
||||||
{ FbWinFrame::BOTTOMLEFT, "BottomLeft" },
|
|
||||||
{ FbWinFrame::BOTTOM, "Bottom" },
|
|
||||||
{ FbWinFrame::BOTTOMRIGHT, "BottomRight" },
|
|
||||||
{ FbWinFrame::LEFTBOTTOM, "LeftBottom" },
|
|
||||||
{ FbWinFrame::LEFT, "Left" },
|
|
||||||
{ FbWinFrame::LEFTTOP, "LeftTop" },
|
|
||||||
{ FbWinFrame::RIGHTBOTTOM, "RightBottom" },
|
|
||||||
{ FbWinFrame::RIGHT, "Right" },
|
|
||||||
{ FbWinFrame::RIGHTTOP, "RightTop" }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // end anonymous namespace
|
} // end anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
@ -239,24 +217,76 @@ namespace FbTk {
|
||||||
template<>
|
template<>
|
||||||
string FbTk::Resource<FbWinFrame::TabPlacement>::
|
string FbTk::Resource<FbWinFrame::TabPlacement>::
|
||||||
getString() const {
|
getString() const {
|
||||||
|
switch (m_value) {
|
||||||
size_t i = (m_value == FbTk::Util::clamp(m_value, FbWinFrame::TOPLEFT, FbWinFrame::RIGHTTOP)
|
case FbWinFrame::TOPLEFT:
|
||||||
? m_value
|
return string("TopLeft");
|
||||||
: FbWinFrame::DEFAULT) - 1;
|
break;
|
||||||
return placement_strings[i].str;
|
case FbWinFrame::BOTTOMLEFT:
|
||||||
|
return string("BottomLeft");
|
||||||
|
break;
|
||||||
|
case FbWinFrame::TOP:
|
||||||
|
return string("Top");
|
||||||
|
break;
|
||||||
|
case FbWinFrame::BOTTOM:
|
||||||
|
return string("Bottom");
|
||||||
|
break;
|
||||||
|
case FbWinFrame::TOPRIGHT:
|
||||||
|
return string("TopRight");
|
||||||
|
break;
|
||||||
|
case FbWinFrame::BOTTOMRIGHT:
|
||||||
|
return string("BottomRight");
|
||||||
|
break;
|
||||||
|
case FbWinFrame::LEFTTOP:
|
||||||
|
return string("LeftTop");
|
||||||
|
break;
|
||||||
|
case FbWinFrame::LEFT:
|
||||||
|
return string("Left");
|
||||||
|
break;
|
||||||
|
case FbWinFrame::LEFTBOTTOM:
|
||||||
|
return string("LeftBottom");
|
||||||
|
break;
|
||||||
|
case FbWinFrame::RIGHTTOP:
|
||||||
|
return string("RightTop");
|
||||||
|
break;
|
||||||
|
case FbWinFrame::RIGHT:
|
||||||
|
return string("Right");
|
||||||
|
break;
|
||||||
|
case FbWinFrame::RIGHTBOTTOM:
|
||||||
|
return string("RightBottom");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//default string
|
||||||
|
return string("TopLeft");
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
void FbTk::Resource<FbWinFrame::TabPlacement>::
|
void FbTk::Resource<FbWinFrame::TabPlacement>::
|
||||||
setFromString(const char *strval) {
|
setFromString(const char *strval) {
|
||||||
|
if (strcasecmp(strval, "TopLeft") == 0)
|
||||||
size_t i;
|
m_value = FbWinFrame::TOPLEFT;
|
||||||
for (i = 0; i < sizeof(placement_strings)/sizeof(TabPlacementString); ++i) {
|
else if (strcasecmp(strval, "BottomLeft") == 0)
|
||||||
if (strcasecmp(strval, placement_strings[i].str) == 0) {
|
m_value = FbWinFrame::BOTTOMLEFT;
|
||||||
m_value = placement_strings[i].placement;
|
else if (strcasecmp(strval, "Top") == 0)
|
||||||
return;
|
m_value = FbWinFrame::TOP;
|
||||||
}
|
else if (strcasecmp(strval, "Bottom") == 0)
|
||||||
}
|
m_value = FbWinFrame::BOTTOM;
|
||||||
|
else if (strcasecmp(strval, "TopRight") == 0)
|
||||||
|
m_value = FbWinFrame::TOPRIGHT;
|
||||||
|
else if (strcasecmp(strval, "BottomRight") == 0)
|
||||||
|
m_value = FbWinFrame::BOTTOMRIGHT;
|
||||||
|
else if (strcasecmp(strval, "LeftTop") == 0)
|
||||||
|
m_value = FbWinFrame::LEFTTOP;
|
||||||
|
else if (strcasecmp(strval, "Left") == 0)
|
||||||
|
m_value = FbWinFrame::LEFT;
|
||||||
|
else if (strcasecmp(strval, "LeftBottom") == 0)
|
||||||
|
m_value = FbWinFrame::LEFTBOTTOM;
|
||||||
|
else if (strcasecmp(strval, "RightTop") == 0)
|
||||||
|
m_value = FbWinFrame::RIGHTTOP;
|
||||||
|
else if (strcasecmp(strval, "Right") == 0)
|
||||||
|
m_value = FbWinFrame::RIGHT;
|
||||||
|
else if (strcasecmp(strval, "RightBottom") == 0)
|
||||||
|
m_value = FbWinFrame::RIGHTBOTTOM;
|
||||||
|
else
|
||||||
setDefaultValue();
|
setDefaultValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1619,41 +1649,41 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
|
||||||
tab_width_item->setCommand(save_and_reconftabs);
|
tab_width_item->setCommand(save_and_reconftabs);
|
||||||
tab_menu->insert(tab_width_item);
|
tab_menu->insert(tab_width_item);
|
||||||
|
|
||||||
// menu is 3 wide, 5 down
|
|
||||||
struct PlacementP {
|
|
||||||
const FbTk::FbString label;
|
|
||||||
FbWinFrame::TabPlacement placement;
|
|
||||||
};
|
|
||||||
static const PlacementP place_menu[] = {
|
|
||||||
|
|
||||||
{ _FB_XTEXT(Align, TopLeft, "Top Left", "Top Left"), FbWinFrame::TOPLEFT},
|
typedef pair<FbTk::FbString, FbWinFrame::TabPlacement> PlacementP;
|
||||||
{ _FB_XTEXT(Align, LeftTop, "Left Top", "Left Top"), FbWinFrame::LEFTTOP},
|
typedef list<PlacementP> Placements;
|
||||||
{ _FB_XTEXT(Align, LeftCenter, "Left Center", "Left Center"), FbWinFrame::LEFT},
|
Placements place_menu;
|
||||||
{ _FB_XTEXT(Align, LeftBottom, "Left Bottom", "Left Bottom"), FbWinFrame::LEFTBOTTOM},
|
|
||||||
{ _FB_XTEXT(Align, BottomLeft, "Bottom Left", "Bottom Left"), FbWinFrame::BOTTOMLEFT},
|
// menu is 3 wide, 5 down
|
||||||
{ _FB_XTEXT(Align, TopCenter, "Top Center", "Top Center"), FbWinFrame::TOP},
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, TopLeft, "Top Left", "Top Left"), FbWinFrame::TOPLEFT));
|
||||||
{ "", FbWinFrame::TOPLEFT},
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, LeftTop, "Left Top", "Left Top"), FbWinFrame::LEFTTOP));
|
||||||
{ "", FbWinFrame::TOPLEFT},
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, LeftCenter, "Left Center", "Left Center"), FbWinFrame::LEFT));
|
||||||
{ "", FbWinFrame::TOPLEFT},
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, LeftBottom, "Left Bottom", "Left Bottom"), FbWinFrame::LEFTBOTTOM));
|
||||||
{ _FB_XTEXT(Align, BottomCenter, "Bottom Center", "Bottom Center"), FbWinFrame::BOTTOM},
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, BottomLeft, "Bottom Left", "Bottom Left"), FbWinFrame::BOTTOMLEFT));
|
||||||
{ _FB_XTEXT(Align, TopRight, "Top Right", "Top Right"), FbWinFrame::TOPRIGHT},
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, TopCenter, "Top Center", "Top Center"), FbWinFrame::TOP));
|
||||||
{ _FB_XTEXT(Align, RightTop, "Right Top", "Right Top"), FbWinFrame::RIGHTTOP},
|
place_menu.push_back(PlacementP("", FbWinFrame::TOPLEFT));
|
||||||
{ _FB_XTEXT(Align, RightCenter, "Right Center", "Right Center"), FbWinFrame::RIGHT},
|
place_menu.push_back(PlacementP("", FbWinFrame::TOPLEFT));
|
||||||
{ _FB_XTEXT(Align, RightBottom, "Right Bottom", "Right Bottom"), FbWinFrame::RIGHTBOTTOM},
|
place_menu.push_back(PlacementP("", FbWinFrame::TOPLEFT));
|
||||||
{ _FB_XTEXT(Align, BottomRight, "Bottom Right", "Bottom Right"), FbWinFrame::BOTTOMRIGHT}
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, BottomCenter, "Bottom Center", "Bottom Center"), FbWinFrame::BOTTOM));
|
||||||
};
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, TopRight, "Top Right", "Top Right"), FbWinFrame::TOPRIGHT));
|
||||||
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, RightTop, "Right Top", "Right Top"), FbWinFrame::RIGHTTOP));
|
||||||
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, RightCenter, "Right Center", "Right Center"), FbWinFrame::RIGHT));
|
||||||
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, RightBottom, "Right Bottom", "Right Bottom"), FbWinFrame::RIGHTBOTTOM));
|
||||||
|
place_menu.push_back(PlacementP(_FB_XTEXT(Align, BottomRight, "Bottom Right", "Bottom Right"), FbWinFrame::BOTTOMRIGHT));
|
||||||
|
|
||||||
tabplacement_menu->setMinimumSublevels(3);
|
tabplacement_menu->setMinimumSublevels(3);
|
||||||
// create items in sub menu
|
// create items in sub menu
|
||||||
for (size_t i=0; i< sizeof(place_menu)/sizeof(PlacementP); ++i) {
|
for (size_t i=0; i<15; ++i) {
|
||||||
const PlacementP& p = place_menu[i];
|
FbTk::FbString &str = place_menu.front().first;
|
||||||
if (p.label == "") {
|
FbWinFrame::TabPlacement placement = place_menu.front().second;
|
||||||
tabplacement_menu->insert(p.label);
|
if (str == "") {
|
||||||
|
tabplacement_menu->insert("");
|
||||||
tabplacement_menu->setItemEnabled(i, false);
|
tabplacement_menu->setItemEnabled(i, false);
|
||||||
} else
|
} else {
|
||||||
tabplacement_menu->insert(new TabPlacementMenuItem(p.label, *this, p.placement, save_and_reconftabs));
|
tabplacement_menu->insert(new TabPlacementMenuItem(str, *this, placement, save_and_reconftabs));
|
||||||
|
}
|
||||||
|
place_menu.pop_front();
|
||||||
}
|
}
|
||||||
|
|
||||||
tabplacement_menu->updateMenu();
|
tabplacement_menu->updateMenu();
|
||||||
|
|
||||||
menu.insert(tabmenu_label, tab_menu);
|
menu.insert(tabmenu_label, tab_menu);
|
||||||
|
|
56
src/main.cc
56
src/main.cc
|
@ -182,14 +182,15 @@ static void showInfo(ostream &ostr) {
|
||||||
endl;
|
endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
struct Options {
|
||||||
|
std::string session_display;
|
||||||
|
std::string rc_file;
|
||||||
|
std::string log_filename;
|
||||||
|
bool xsync;
|
||||||
|
};
|
||||||
|
|
||||||
string session_display("");
|
static void parseOptions(int argc, char** argv, Options& opts) {
|
||||||
string rc_file;
|
|
||||||
string log_filename;
|
|
||||||
bool xsync = false;
|
|
||||||
|
|
||||||
FbTk::NLSInit("fluxbox.cat");
|
|
||||||
_FB_USES_NLS;
|
_FB_USES_NLS;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
@ -204,7 +205,7 @@ int main(int argc, char **argv) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
rc_file = argv[i];
|
opts.rc_file = argv[i];
|
||||||
} else if (arg == "-display" || arg == "--display") {
|
} else if (arg == "-display" || arg == "--display") {
|
||||||
// check for -display option... to run on a display other than the one
|
// check for -display option... to run on a display other than the one
|
||||||
// set by the environment variable DISPLAY
|
// set by the environment variable DISPLAY
|
||||||
|
@ -216,8 +217,8 @@ int main(int argc, char **argv) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
session_display = argv[i];
|
opts.session_display = argv[i];
|
||||||
string display_env = "DISPLAY=" + session_display;
|
string display_env = "DISPLAY=" + opts.session_display;
|
||||||
if (putenv(const_cast<char *>(display_env.c_str()))) {
|
if (putenv(const_cast<char *>(display_env.c_str()))) {
|
||||||
cerr<<_FB_CONSOLETEXT(main, WarnDisplayEnv,
|
cerr<<_FB_CONSOLETEXT(main, WarnDisplayEnv,
|
||||||
"warning: couldn't set environment variable 'DISPLAY'",
|
"warning: couldn't set environment variable 'DISPLAY'",
|
||||||
|
@ -226,16 +227,16 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
} else if (arg == "-version" || arg == "-v" || arg == "--version") {
|
} else if (arg == "-version" || arg == "-v" || arg == "--version") {
|
||||||
// print current version string
|
// print current version string
|
||||||
cout << "Fluxbox " << __fluxbox_version << " : (c) 2001-2008 Fluxbox Team " << endl << endl;
|
cout << "Fluxbox " << __fluxbox_version << " : (c) 2001-2010 Fluxbox Team " << endl << endl;
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
} else if (arg == "-log" || arg == "--log") {
|
} else if (arg == "-log" || arg == "--log") {
|
||||||
if (++i >= argc) {
|
if (++i >= argc) {
|
||||||
cerr<<_FB_CONSOLETEXT(main, LOGRequiresArg, "error: '-log' needs an argument", "")<<endl;
|
cerr<<_FB_CONSOLETEXT(main, LOGRequiresArg, "error: '-log' needs an argument", "")<<endl;
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
log_filename = argv[i];
|
opts.log_filename = argv[i];
|
||||||
} else if (arg == "-sync" || arg == "--sync") {
|
} else if (arg == "-sync" || arg == "--sync") {
|
||||||
xsync = true;
|
opts.xsync = true;
|
||||||
} else if (arg == "-help" || arg == "-h" || arg == "--help") {
|
} else if (arg == "-help" || arg == "-h" || arg == "--help") {
|
||||||
// print program usage and command line options
|
// print program usage and command line options
|
||||||
printf(_FB_CONSOLETEXT(main, Usage,
|
printf(_FB_CONSOLETEXT(main, Usage,
|
||||||
|
@ -252,7 +253,7 @@ int main(int argc, char **argv) {
|
||||||
"-help\t\t\t\tdisplay this help text and exit.\n\n",
|
"-help\t\t\t\tdisplay this help text and exit.\n\n",
|
||||||
|
|
||||||
"Main usage string. Please lay it out nicely. There is one %s that is given the version").c_str(),
|
"Main usage string. Please lay it out nicely. There is one %s that is given the version").c_str(),
|
||||||
__fluxbox_version, "2001-2008");
|
__fluxbox_version, "2001-2010");
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
} else if (arg == "-info" || arg == "-i" || arg == "--info") {
|
} else if (arg == "-info" || arg == "-i" || arg == "--info") {
|
||||||
showInfo(cout);
|
showInfo(cout);
|
||||||
|
@ -268,23 +269,34 @@ int main(int argc, char **argv) {
|
||||||
FbTk::ThemeManager::instance().setVerbose(true);
|
FbTk::ThemeManager::instance().setVerbose(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
FbTk::NLSInit("fluxbox.cat");
|
||||||
|
|
||||||
|
Options opts;
|
||||||
|
parseOptions(argc, argv, opts);
|
||||||
|
|
||||||
#ifdef __EMX__
|
#ifdef __EMX__
|
||||||
_chdir2(getenv("X11ROOT"));
|
_chdir2(getenv("X11ROOT"));
|
||||||
#endif // __EMX__
|
#endif // __EMX__
|
||||||
auto_ptr<Fluxbox> fluxbox;
|
auto_ptr<Fluxbox> fluxbox;
|
||||||
int exitcode=EXIT_FAILURE;
|
|
||||||
|
|
||||||
streambuf *outbuf = 0;
|
streambuf *outbuf = 0;
|
||||||
streambuf *errbuf = 0;
|
streambuf *errbuf = 0;
|
||||||
|
|
||||||
ofstream log_file(log_filename.c_str());
|
ofstream log_file(opts.log_filename.c_str());
|
||||||
|
|
||||||
|
_FB_USES_NLS;
|
||||||
|
|
||||||
// setup log file
|
// setup log file
|
||||||
if (log_file) {
|
if (log_file.is_open()) {
|
||||||
cerr<<_FB_CONSOLETEXT(main, LoggingTo, "Logging to", "Logging to a file")<<": "<<log_filename<<endl;
|
cerr<<_FB_CONSOLETEXT(main, LoggingTo, "Logging to", "Logging to a file")<<": "<<opts.log_filename<<endl;
|
||||||
log_file<<"------------------------------------------"<<endl;
|
log_file<<"------------------------------------------"<<endl;
|
||||||
log_file<<_FB_CONSOLETEXT(main, LogFile, "Log File", "")<<": "<<log_filename<<endl;
|
log_file<<_FB_CONSOLETEXT(main, LogFile, "Log File", "")<<": "<<opts.log_filename<<endl;
|
||||||
showInfo(log_file);
|
showInfo(log_file);
|
||||||
log_file<<"------------------------------------------"<<endl;
|
log_file<<"------------------------------------------"<<endl;
|
||||||
// setup log to use cout and cerr stream
|
// setup log to use cout and cerr stream
|
||||||
|
@ -292,10 +304,14 @@ int main(int argc, char **argv) {
|
||||||
errbuf = cerr.rdbuf(log_file.rdbuf());
|
errbuf = cerr.rdbuf(log_file.rdbuf());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int exitcode = EXIT_FAILURE;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
fluxbox.reset(new Fluxbox(argc, argv, session_display.c_str(),
|
fluxbox.reset(new Fluxbox(argc, argv,
|
||||||
rc_file.c_str(), xsync));
|
opts.session_display.c_str(),
|
||||||
|
opts.rc_file.c_str(),
|
||||||
|
opts.xsync));
|
||||||
fluxbox->eventLoop();
|
fluxbox->eventLoop();
|
||||||
|
|
||||||
exitcode = EXIT_SUCCESS;
|
exitcode = EXIT_SUCCESS;
|
||||||
|
|
Loading…
Reference in a new issue