From 248639a7aaa1c2330d9c9c20d8ae0f8c6841e77d Mon Sep 17 00:00:00 2001 From: fluxgen Date: Thu, 5 Dec 2002 00:07:39 +0000 Subject: indentation and minor fbtk updates --- util/fbrun/FbRun.cc | 321 +++++++++++++++++++++++----------------------------- util/fbrun/FbRun.hh | 112 +++++++++--------- util/fbrun/main.cc | 219 +++++++++++++++++------------------ 3 files changed, 299 insertions(+), 353 deletions(-) diff --git a/util/fbrun/FbRun.cc b/util/fbrun/FbRun.cc index 1dc5ae7..0ce297a 100644 --- a/util/fbrun/FbRun.cc +++ b/util/fbrun/FbRun.cc @@ -19,12 +19,13 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: FbRun.cc,v 1.8 2002/11/27 21:56:56 fluxgen Exp $ +// $Id: FbRun.cc,v 1.9 2002/12/05 00:07:39 fluxgen Exp $ #include "FbRun.hh" #include "App.hh" #include "EventManager.hh" +#include "Color.hh" #include #include @@ -37,248 +38,208 @@ using namespace std; FbRun::FbRun(int x, int y, size_t width): -m_font("fixed"), -m_win(None), -m_display(FbTk::App::instance()->display()), -m_bevel(4), -m_gc(DefaultGC(m_display, DefaultScreen(m_display))), -m_end(false), -m_current_history_item(0) { - createWindow(x, y, width + m_bevel, m_font.height()); + m_font("fixed"), + m_win((int)0, x, y, //screen num and position + width + m_bevel, m_font.height(), // size + KeyPressMask|ExposureMask), // eventmask + m_display(FbTk::App::instance()->display()), + m_bevel(4), + m_gc(DefaultGC(m_display, DefaultScreen(m_display))), + m_end(false), + m_current_history_item(0) { + // setting nomaximize in local resize + resize(width, m_font.height()); + FbTk::EventManager::instance()->registerEventHandler(*this, m_win.window()); } FbRun::~FbRun() { - hide(); - FbTk::EventManager::instance()->unregisterEventHandler(m_win); - XDestroyWindow(m_display, m_win); + hide(); + FbTk::EventManager::instance()->unregisterEventHandler(m_win.window()); } void FbRun::run(const std::string &command) { - //fork and execute program - if (!fork()) { - setsid(); - execl("/bin/sh", "/bin/sh", "-c", command.c_str(), 0); - exit(0); //exit fork - } - - hide(); // hide gui + //fork and execute program + if (!fork()) { + setsid(); + execl("/bin/sh", "/bin/sh", "-c", command.c_str(), 0); + exit(0); //exit child + } + + hide(); // hide gui - // save command history to file - if (m_runtext.size() != 0) { // no need to save empty command - // open file in append mode - ofstream outfile(m_history_file.c_str(), ios::app); - if (outfile) - outfile<end(); // end application - m_end = true; // mark end of processing + // save command history to file + if (m_runtext.size() != 0) { // no need to save empty command + // open file in append mode + ofstream outfile(m_history_file.c_str(), ios::app); + if (outfile) + outfile<end(); // end application + m_end = true; // mark end of processing } bool FbRun::loadHistory(const char *filename) { - if (filename == 0) - return false; - ifstream infile(filename); - if (!infile) { - //even though we fail to load file, we should try save to it - m_history_file = filename; - return false; - } - // clear old history and load new one from file - m_history.clear(); - // each line is a command - string line; - while (!infile.eof()) { - getline(infile, line); - if (line.size()) // don't add empty lines - m_history.push_back(line); - } - // set no current histor to display - m_current_history_item = m_history.size(); - // set history file - m_history_file = filename; - return true; + if (filename == 0) + return false; + ifstream infile(filename); + if (!infile) { + //even though we fail to load file, we should try save to it + m_history_file = filename; + return false; + } + // clear old history and load new one from file + m_history.clear(); + // each line is a command + string line; + while (!infile.eof()) { + getline(infile, line); + if (line.size()) // don't add empty lines + m_history.push_back(line); + } + // set no current histor to display + m_current_history_item = m_history.size(); + // set history file + m_history_file = filename; + return true; } bool FbRun::loadFont(const string &fontname) { - if (!m_font.load(fontname.c_str())) - return false; + if (!m_font.load(fontname.c_str())) + return false; - // resize to fit new font height - resize(m_width, m_font.height() + m_bevel); - return true; + // resize to fit new font height + resize(m_win.width(), m_font.height() + m_bevel); + return true; } -void FbRun::setForeground(const XColor &color) { - XSetForeground(m_display, m_gc, color.pixel); - redrawLabel(); +void FbRun::setForeground(const FbTk::Color &color) { + XSetForeground(m_display, m_gc, color.pixel()); + redrawLabel(); } -void FbRun::setBackground(const XColor &color) { - XSetWindowBackground(m_display, m_win, color.pixel); - redrawLabel(); +void FbRun::setBackground(const FbTk::Color &color) { + m_win.setBackgroundColor(color); + redrawLabel(); } void FbRun::setText(const string &text) { - m_runtext = text; - redrawLabel(); + m_runtext = text; + redrawLabel(); } void FbRun::setTitle(const string &title) { - assert(m_win); - XStoreName(m_display, m_win, const_cast(title.c_str())); + m_win.setName(title.c_str()); } void FbRun::move(int x, int y) { - XMoveWindow(m_display, m_win, x, y); + m_win.move(x, y); } void FbRun::resize(size_t width, size_t height) { - assert(m_win); - XResizeWindow(m_display, m_win, width, height); - m_width = width; - m_height = height; - setNoMaximize(); + m_win.resize(width, height); + setNoMaximize(); } void FbRun::show() { - assert(m_win); - XMapWindow(m_display, m_win); + m_win.show(); } void FbRun::hide() { - assert(m_win); - XUnmapWindow(m_display, m_win); + m_win.hide(); } void FbRun::redrawLabel() { - assert(m_win); - - XClearWindow(m_display, m_win); - drawString(m_bevel/2, m_font.ascent() + m_bevel/2, - m_runtext.c_str(), m_runtext.size()); + m_win.clear(); + drawString(m_bevel/2, m_font.ascent() + m_bevel/2, + m_runtext.c_str(), m_runtext.size()); } void FbRun::drawString(int x, int y, - const char *text, size_t len) { - assert(m_win); - assert(m_gc); - // check right boundary - // and adjust text drawing - size_t text_width = m_font.textWidth(text, len); - size_t startpos = 0; - if (text_width > m_width) { - for (; startpos < len; ++startpos) { - if (m_font.textWidth(text+startpos, len-startpos) < m_width) - break; - } - } - - m_font.drawText(m_win, DefaultScreen(m_display), m_gc, text + startpos, len-startpos, x, y); -} - - -void FbRun::createWindow(int x, int y, size_t width, size_t height) { - m_win = XCreateSimpleWindow(m_display, // display - DefaultRootWindow(m_display), // parent windows - x, y, - width, height, - 1, // border_width - 0, // border - WhitePixel(m_display, DefaultScreen(m_display))); // background - - if (m_win == None) - throw string("Failed to create FbRun window!"); - - XSelectInput(m_display, m_win, KeyPressMask|ExposureMask); - - FbTk::EventManager::instance()->registerEventHandler(*this, m_win); - - setNoMaximize(); + const char *text, size_t len) { + assert(m_gc); - m_width = width; - m_height = height; + // check right boundary and adjust text drawing + size_t text_width = m_font.textWidth(text, len); + size_t startpos = 0; + if (text_width > m_win.width()) { + for (; startpos < len; ++startpos) { + if (m_font.textWidth(text+startpos, len-startpos) < m_win.width()) + break; + } + } + m_font.drawText(m_win.window(), DefaultScreen(m_display), m_gc, text + startpos, len-startpos, x, y); } void FbRun::keyPressEvent(XKeyEvent &ke) { - KeySym ks; - char keychar[1]; - XLookupString(&ke, keychar, 1, &ks, 0); - if (ks == XK_Escape) { - m_end = true; - hide(); - return; // no more processing - } else if (ks == XK_Return) { - run(m_runtext); - m_runtext = ""; // clear text - } else if (ks == XK_BackSpace) { - if (m_runtext.size() != 0) { // we can't erase what we don't have ;) - m_runtext.erase(m_runtext.size()-1); - redrawLabel(); - } - } else if (! IsModifierKey(ks) && !IsCursorKey(ks)) { - m_runtext+=keychar[0]; // append character - redrawLabel(); - } else if (IsCursorKey(ks)) { + KeySym ks; + char keychar[1]; + XLookupString(&ke, keychar, 1, &ks, 0); + if (ks == XK_Escape) { + m_end = true; + hide(); + FbTk::App::instance()->end(); // end program + return; // no more processing + } else if (ks == XK_Return) { + run(m_runtext); + m_runtext = ""; // clear text + } else if (ks == XK_BackSpace) { + if (m_runtext.size() != 0) { // we can't erase what we don't have ;) + m_runtext.erase(m_runtext.size()-1); + redrawLabel(); + } + } else if (! IsModifierKey(ks) && !IsCursorKey(ks)) { + m_runtext+=keychar[0]; // append character + redrawLabel(); + } else if (IsCursorKey(ks)) { - switch (ks) { - case XK_Up: - prevHistoryItem(); - break; - case XK_Down: - nextHistoryItem(); - break; - } - redrawLabel(); - } + switch (ks) { + case XK_Up: + prevHistoryItem(); + break; + case XK_Down: + nextHistoryItem(); + break; + } + redrawLabel(); + } } void FbRun::exposeEvent(XExposeEvent &ev) { - redrawLabel(); + redrawLabel(); } -void FbRun::getSize(size_t &width, size_t &height) { - XWindowAttributes attr; - XGetWindowAttributes(m_display, m_win, &attr); - width = attr.width; - height = attr.height; -} void FbRun::setNoMaximize() { - - size_t width, height; - - getSize(width, height); - - // we don't need to maximize this window - XSizeHints sh; - sh.flags = PMaxSize | PMinSize; - sh.max_width = width; - sh.max_height = height; - sh.min_width = width; - sh.min_height = height; - XSetWMNormalHints(m_display, m_win, &sh); + // we don't need to maximize this window + XSizeHints sh; + sh.flags = PMaxSize | PMinSize; + sh.max_width = m_win.width(); + sh.max_height = m_win.height(); + sh.min_width = m_win.width(); + sh.min_height = m_win.height(); + XSetWMNormalHints(m_display, m_win.window(), &sh); } void FbRun::prevHistoryItem() { - if (m_current_history_item > 0 && m_history.size() > 0) - m_current_history_item--; - if (m_current_history_item < m_history.size()) - m_runtext = m_history[m_current_history_item]; + if (m_current_history_item > 0 && m_history.size() > 0) + m_current_history_item--; + if (m_current_history_item < m_history.size()) + m_runtext = m_history[m_current_history_item]; } void FbRun::nextHistoryItem() { - m_current_history_item++; - if (m_current_history_item >= m_history.size()) { - m_current_history_item = m_history.size(); - m_runtext = ""; - return; - } else - m_runtext = m_history[m_current_history_item]; + m_current_history_item++; + if (m_current_history_item >= m_history.size()) { + m_current_history_item = m_history.size(); + m_runtext = ""; + return; + } else + m_runtext = m_history[m_current_history_item]; } diff --git a/util/fbrun/FbRun.hh b/util/fbrun/FbRun.hh index 41e5925..a577e45 100644 --- a/util/fbrun/FbRun.hh +++ b/util/fbrun/FbRun.hh @@ -19,79 +19,79 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: FbRun.hh,v 1.7 2002/11/27 21:56:02 fluxgen Exp $ +// $Id: FbRun.hh,v 1.8 2002/12/05 00:07:38 fluxgen Exp $ #ifndef FBRUN_HH #define FBRUN_HH #include "EventHandler.hh" #include "Font.hh" +#include "FbWindow.hh" #include #include /** - Creates and managed a run window + Creates and managed a run window */ class FbRun: public FbTk::EventHandler { public: - FbRun(int x = 0, int y = 0, size_t width = 200); - ~FbRun(); - void handleEvent(XEvent * const ev); - void setText(const std::string &text); - void setTitle(const std::string &title); - void move(int x, int y); - void resize(size_t width, size_t height); - size_t height() const { return m_height; } - size_t width() const { return m_width; } - /// hide window - void hide(); - /// show window - void show(); - /// load and reconfigure for new font - bool loadFont(const std::string &fontname); - void setForeground(const XColor &color); - void setBackground(const XColor &color); - void setAntialias(bool val) { m_font.setAntialias(val); } - const FbTk::Font &font() const { return m_font; } - /// execute command and exit - void run(const std::string &execstring); - /// is this application done? - bool end() const { return m_end; } - /** - loads history file. - @return true on success, else false - */ - bool loadHistory(const char *filename); - /** - @name events - */ - ///@{ - void exposeEvent(XExposeEvent &ev); - void keyPressEvent(XKeyEvent &ev); - ///@} + FbRun(int x = 0, int y = 0, size_t width = 200); + ~FbRun(); + void handleEvent(XEvent * const ev); + void setText(const std::string &text); + void setTitle(const std::string &title); + void move(int x, int y); + void resize(size_t width, size_t height); + size_t height() const { return m_win.height(); } + size_t width() const { return m_win.width(); } + /// hide window + void hide(); + /// show window + void show(); + /// load and reconfigure for new font + bool loadFont(const std::string &fontname); + void setForeground(const FbTk::Color &color); + void setBackground(const FbTk::Color &color); + void setAntialias(bool val) { m_font.setAntialias(val); } + const FbTk::Font &font() const { return m_font; } + /// execute command and exit + void run(const std::string &execstring); + /// is this application done? + bool end() const { return m_end; } + /** + loads history file. + @return true on success, else false + */ + bool loadHistory(const char *filename); + /** + @name events + */ + ///@{ + void exposeEvent(XExposeEvent &ev); + void keyPressEvent(XKeyEvent &ev); + ///@} private: - void nextHistoryItem(); - void prevHistoryItem(); - void drawString(int x, int y, const char *text, size_t len); - void getSize(size_t &width, size_t &height); - void createWindow(int x, int y, size_t width, size_t height); - void redrawLabel(); - /// set no maximizable for this window - void setNoMaximize(); + void nextHistoryItem(); + void prevHistoryItem(); + void drawString(int x, int y, const char *text, size_t len); + void getSize(size_t &width, size_t &height); + void createWindow(int x, int y, size_t width, size_t height); + void redrawLabel(); + /// set no maximizable for this window + void setNoMaximize(); - FbTk::Font m_font; ///< font used to draw command text - Window m_win; ///< toplevel window - Display *m_display; ///< display connection - std::string m_runtext; ///< command to execute - size_t m_width, m_height; ///< size of window - int m_bevel; ///< distance to window edge from font in pixels - GC m_gc; ///< graphic context - bool m_end; ///< marks when this object is done - std::vector m_history; ///< history list of commands - size_t m_current_history_item; ///< holds current position in command history - std::string m_history_file; ///< holds filename for command history file + FbTk::Font m_font; ///< font used to draw command text + FbTk::FbWindow m_win; ///< toplevel window + Display *m_display; ///< display connection + std::string m_runtext; ///< command to execute + int m_bevel; ///< distance to window edge from font in pixels + GC m_gc; ///< graphic context + bool m_end; ///< marks when this object is done + std::vector m_history; ///< history list of commands + size_t m_current_history_item; ///< holds current position in command history + std::string m_history_file; ///< holds filename for command history file }; #endif // FBRUN_HH diff --git a/util/fbrun/main.cc b/util/fbrun/main.cc index 9c73aa5..ff9402c 100644 --- a/util/fbrun/main.cc +++ b/util/fbrun/main.cc @@ -19,11 +19,12 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: main.cc,v 1.7 2002/11/27 21:54:11 fluxgen Exp $ +// $Id: main.cc,v 1.8 2002/12/05 00:07:39 fluxgen Exp $ #include "FbRun.hh" #include "App.hh" #include "StringUtil.hh" +#include "Color.hh" #include #include @@ -31,134 +32,118 @@ using namespace std; void showUsage(const char *progname) { - cerr<<"fbrun 1.1.2 : (c) 2002 Henrik Kinnunen"<