]> git.lyx.org Git - features.git/commitdiff
Update from deprecated Combo to ComboBox in GLayout
authorJohn Spray <spray@lyx.org>
Fri, 1 Oct 2004 18:41:16 +0000 (18:41 +0000)
committerJohn Spray <spray@lyx.org>
Fri, 1 Oct 2004 18:41:16 +0000 (18:41 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9031 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/gtk/ChangeLog
src/frontends/gtk/GToolbar.C
src/frontends/gtk/GToolbar.h

index 3e47427ee84825377dcbe5dd453b5049fb1c0748..9c1afc06fe5b3019b3f6d0ee1daae2030ad9b15a 100644 (file)
@@ -1,3 +1,8 @@
+2004-09-28  John Spray  <spray_john@users.sourceforge.net>
+
+       * GToolbar.[Ch]: Use ComboBox instead of deprecated Combo for
+       GLayoutBox class
+
 2004-09-27  Lars Gullik Bjønnes  <larsbj@gullik.net>
 
        * lyx_gui.C (start): change comment
index d049872b78d192b56396a013dfacc39180625f7e..3cc6df480a044ec2790ed1d9fa26573bdce254de 100644 (file)
@@ -46,21 +46,6 @@ LyXTextClass const & getTextClass(LyXView const & lv)
        return lv.buffer()->params().getLyXTextClass();
 }
 
-
-void comboClear(Gtk::Combo & combo)
-{
-       std::vector<Glib::ustring> strings;
-       strings.push_back("");
-       combo.set_popdown_strings(strings);
-}
-
-
-bool comboIsEmpty(Gtk::Combo & combo)
-{
-       std::vector<Glib::ustring> strings = combo.get_popdown_strings();
-       return (strings.empty() || (strings.size() == 1 && strings[0] == ""));
-}
-
 char const * gToolData = "tool_data";
 
 } // namespace anon
@@ -72,65 +57,89 @@ GLayoutBox::GLayoutBox(LyXView & owner,
        : owner_(owner),
          internal_(false)
 {
-       combo_.set_value_in_list();
-       combo_.get_entry()->set_editable(false);
-       combo_.unset_flags(Gtk::CAN_FOCUS | Gtk::CAN_DEFAULT);
-       combo_.get_entry()->unset_flags(Gtk::CAN_FOCUS | Gtk::CAN_DEFAULT);
-       comboClear(combo_);
-
-       combo_.get_entry()->signal_changed().connect(
+       combo_.signal_changed().connect(
                sigc::mem_fun(*this,&GLayoutBox::selected));
 
-       combo_.show();
+       model_ = Gtk::ListStore::create(cols_);
+       combo_.set_model(model_);
+       Gtk::CellRendererText * cell = Gtk::manage(new Gtk::CellRendererText);
+       combo_.pack_start(*cell, true);
+       combo_.add_attribute(*cell,"text",0);
+       combo_.set_wrap_width(2);
+       //Initially there's nothing in the liststore, so set the size
+       //to avoid it jumping too much when the user does something that
+       //causes the first update()
+       combo_.set_size_request(130,-1);
+
 
        combo_.set_data(
                gToolData,
                reinterpret_cast<void*>(&const_cast<FuncRequest &>(func)));
 
+       combo_.show();
+
        Gtk::ToolItem * toolitem = Gtk::manage(new Gtk::ToolItem);
        toolitem->add(combo_);
-       toolbar.insert(*toolitem,-1);
+       toolbar.append(*toolitem);
 }
 
 void GLayoutBox::set(string const & layout)
 {
        LyXTextClass const & tc = getTextClass(owner_);
+       string const target = tc[layout]->name();
 
        internal_ = true;
-       combo_.get_entry()->set_text(tc[layout]->name());
+       Gtk::TreeModel::iterator it = model_->children().begin();
+       Gtk::TreeModel::iterator end = model_->children().end();
+       for (; it != end; ++it) {
+               if ((*it)[cols_.name] == target){
+                       combo_.set_active(it);
+                       internal_ = false;
+                       return;
+               }
+       }
        internal_ = false;
+
+       lyxerr << "ERROR (GLayoutBox::set): layout not found! name: "
+              << target << std::endl;
 }
 
 
 void GLayoutBox::update()
 {
-       LyXTextClass const & tc = getTextClass(owner_);
+       clear();
 
-       std::vector<Glib::ustring> strings;
+       LyXTextClass const & tc = getTextClass(owner_);
 
        LyXTextClass::const_iterator it = tc.begin();
        LyXTextClass::const_iterator const end = tc.end();
-       for (; it != end; ++it)
-               if ((*it)->obsoleted_by().empty())
-                       strings.push_back(
-                               Glib::locale_to_utf8((*it)->name()));
+
        internal_ = true;
-       combo_.set_popdown_strings(strings);
+       for (; it != end; ++it)
+               if ((*it)->obsoleted_by().empty()) {
+                       Gtk::TreeModel::iterator iter = model_->append();
+                       Gtk::TreeModel::Row row = *iter;
+                       row[cols_.name] = Glib::locale_to_utf8((*it)->name());
+               }
        internal_ = false;
+
+       //now that we've loaded something into the combobox, forget
+       //the initial fixed size and let GTK decide.
+       combo_.set_size_request(-1,-1);
 }
 
 
 void GLayoutBox::clear()
 {
        internal_ = true;
-       comboClear(combo_);
+       model_->clear();
        internal_ = false;
 }
 
 
 void GLayoutBox::open()
 {
-       combo_.get_list()->activate();
+       combo_.popup();
 }
 
 
@@ -145,7 +154,8 @@ void GLayoutBox::selected()
        if (internal_)
                return;
 
-       string layoutGuiName = combo_.get_entry()->get_text();
+       Glib::ustring layoutGuiName = (*(combo_.get_active()))[cols_.name];
+
        // we get two signal, one of it is empty and useless
        if (layoutGuiName.empty())
                return;
@@ -208,7 +218,7 @@ void GToolbar::add(FuncRequest const & func, string const & tooltip)
        case ToolbarBackend::SEPARATOR: {
                Gtk::SeparatorToolItem * space =
                        Gtk::manage(new Gtk::SeparatorToolItem);
-               toolbar_.insert(*space,-1);
+               toolbar_.append(*space);
                break;
        }
 
@@ -241,7 +251,7 @@ void GToolbar::add(FuncRequest const & func, string const & tooltip)
                tooltips_.set_tip(*toolbutton, tip, tip);
                toolbutton->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this,
                        &GToolbar::clicked), FuncRequest(func)));
-               toolbar_.insert(*toolbutton,-1);
+               toolbar_.append(*toolbutton);
                break;
        }
 
index 2f675de7f72c29252801c601303065e4a0b4c10d..4730964518bb6c8415c0259c29a713d28eec3d90 100644 (file)
@@ -24,6 +24,17 @@ namespace frontend {
 
 class GView;
 
+class stringcolumns : public Gtk::TreeModel::ColumnRecord {
+public:
+       stringcolumns()
+       {
+               add(name);
+       }
+
+       Gtk::TreeModelColumn<Glib::ustring> name;
+};
+
+
 class GLayoutBox: public LayoutBox, public sigc::trackable {
 public:
        GLayoutBox(LyXView &, Gtk::Toolbar &, FuncRequest const &);
@@ -42,7 +53,10 @@ private:
        ///
        void selected();
 
-       Gtk::Combo combo_;
+       Gtk::ComboBox combo_;
+       Glib::RefPtr<Gtk::ListStore> model_;
+       stringcolumns cols_;
+
        LyXView & owner_;
        bool internal_;
 };