]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/gtk/GView.C
Change glob() API to accept a dir parameter.
[lyx.git] / src / frontends / gtk / GView.C
index e71763757cda0be59d645ed95003c69d319b1beb..742541afa31eeeb45e488b7b402f2120d3e0bb23 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * \file GView.C
+ * \file gtk/GView.C
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
  */
 
 #include <config.h>
-#include <gtkmm.h>
+
+// Too hard to make concept checks work with this file
+#ifdef _GLIBCPP_CONCEPT_CHECKS
+#undef _GLIBCPP_CONCEPT_CHECKS
+#endif
 
 #include "GView.h"
-#include "MenuBackend.h"
-#include "support/filetools.h"
 #include "GMenubar.h"
-#include "GToolbar.h"
+#include "GMiniBuffer.h"
+
 #include "BufferView.h"
-#include "XWorkArea.h"
 #include "lyx_cb.h"
-#include "GMiniBuffer.h"
 #include "lyxfunc.h"
+#include "MenuBackend.h"
+
+#include "frontends/Toolbars.h"
+
+#include "support/filetools.h"
+
 #include <boost/bind.hpp>
 
+#include <vector>
+
 using std::string;
 
+namespace lyx {
+namespace frontend {
 
-BufferView * current_view;
+namespace {
 
-GView * GView::view_ = 0;
+void add_el(Gtk::Box::BoxList & list, Gtk::Box & box, bool shrink)
+{
+       Gtk::PackOptions const packing =
+               shrink ? Gtk::PACK_SHRINK : Gtk::PACK_EXPAND_WIDGET;
+       list.push_back(Gtk::Box_Helpers::Element(box, packing));
+}
+
+} // namespace anon
 
 
 GView::GView()
 {
-       view_ = this;
-       vbox_.reset(new Gtk::VBox);
-       add(*vbox_.get());
+       // The physical store for the boxes making up the layout.
+       box_store_.push_back(BoxPtr(new Gtk::VBox));
+       box_store_.push_back(BoxPtr(new Gtk::HBox));
+       box_store_.push_back(BoxPtr(new Gtk::VBox));
+       box_store_.push_back(BoxPtr(new Gtk::HBox));
+       box_store_.push_back(BoxPtr(new Gtk::HBox));
+       box_store_.push_back(BoxPtr(new Gtk::HBox));
+
+       // Lay them out correctly.
+       add(top_box_);
+
+       Gtk::Box::BoxList & layout1 = top_box_.children();
+       add_el(layout1, *box_store_[0], true);
+       add_el(layout1, *box_store_[1], false);
+       add_el(layout1, *box_store_[2], true);
+
+       Gtk::Box::BoxList & layout2 = box_store_[1]->children();
+       add_el(layout2, *box_store_[3], true);
+       add_el(layout2, *box_store_[4], false);
+       add_el(layout2, *box_store_[5], true);
+
+       // Define accessors to the various Boxes.
+       box_map_[Top]    = box_store_[0];
+       box_map_[Bottom] = box_store_[2];
+       box_map_[Left]   = box_store_[3];
+       box_map_[Center] = box_store_[4];
+       box_map_[Right]  = box_store_[5];
+
+       // Make all Boxes visible.
+       top_box_.show_all();
+
+       // Define the components making up the window.
        menubar_.reset(new GMenubar(this, menubackend));
-       toolbar_.reset(new GToolbar(this, 0, 0));
-       toolbar_->init();
-       bufferview_.reset(new BufferView(this, 0, 0, 300, 300));
-       ::current_view = bufferview_.get();
+       getToolbars().init();
+       bufferview_.reset(new BufferView(this, 300, 300));
        minibuffer_.reset(new GMiniBuffer(this, *controlcommand_));
-       vbox_->show();
+
        focus_command_buffer.connect(
                boost::bind(&GMiniBuffer::editMode, minibuffer_.get()));
        view_state_changed.connect(boost::bind(&GView::showViewState, this));
-       signal_focus_in_event().connect(SigC::slot(*this, &GView::onFocusIn));
-       set_default_size(500, 550);
+       signal_focus_in_event().connect(sigc::mem_fun(*this, &GView::onFocusIn));
+       set_default_size(620, 550);
        // Make sure the buttons are disabled if needed.
-       updateToolbar();
+       updateToolbars();
        string const iconName =
-               lyx::support::LibFileSearch("images", "lyx", "xpm");
+               support::LibFileSearch("images", "lyx", "xpm");
        if (!iconName.empty())
                set_icon_from_file(iconName);
 }
 
 
 GView::~GView()
+{}
+
+
+Gtk::Box & GView::getBox(Position pos)
 {
+       return *box_map_[pos];
 }
 
 
@@ -97,7 +147,7 @@ void GView::message(string const & msg)
 
 void GView::showViewState()
 {
-       message(getLyXFunc().view_status_message());
+       message(getLyXFunc().viewStatusMessage());
 }
 
 
@@ -112,16 +162,27 @@ void GView::busy(bool yes) const
        if (yes ) {
                view()->hideCursor();
                Gdk::Cursor cursor(Gdk::WATCH);
-               const_cast<GView*>(this)->get_window()->set_cursor(cursor);
-               const_cast<GView*>(this)->set_sensitive(false);
+               const_cast<GView *>(this)->get_window()->set_cursor(cursor);
+               const_cast<GView *>(this)->set_sensitive(false);
        } else {
-               const_cast<GView*>(this)->get_window()->set_cursor();
-               const_cast<GView*>(this)->set_sensitive(true);
+               const_cast<GView *>(this)->get_window()->set_cursor();
+               const_cast<GView *>(this)->set_sensitive(true);
        }
 }
 
 
 void GView::clearMessage()
 {
-       message(getLyXFunc().view_status_message());
+       message(getLyXFunc().viewStatusMessage());
+}
+
+
+bool GView::hasFocus() const
+{
+       // No real implementation needed for now
+       return true;
 }
+
+
+} // namespace frontend
+} // namespace lyx