OSDN Git Service

Text view initialization method is implemented.
authorAiwota Programmer <aiwotaprog@tetteke.tk>
Sun, 28 Jun 2009 21:10:14 +0000 (06:10 +0900)
committerAiwota Programmer <aiwotaprog@tetteke.tk>
Sun, 28 Jun 2009 21:10:14 +0000 (06:10 +0900)
src/scrolled_container.cxx
src/scrolled_container.hxx
src/thread_window.cxx
src/thread_window.hxx

index e004995..07c17eb 100644 (file)
@@ -41,6 +41,12 @@ void Scrollbar::on_adjustment_changed() {
     show();
 }
 
+void Scrollbar::set_adjustment(Gtk::Adjustment& adjustment) {
+  Gtk::VScrollbar::set_adjustment(adjustment);
+  adjustment.signal_changed().connect(
+      sigc::mem_fun(*this, &Scrollbar::on_adjustment_changed));
+}
+
 
 void ScrolledContainer::add(Gtk::Widget& child) {
   child.add_events(Gdk::SCROLL_MASK);
@@ -55,5 +61,8 @@ bool ScrolledContainer::on_child_scroll_event(GdkEventScroll* event) {
   return true;
 }
 
+void ScrolledContainer::set_adjustment(Gtk::Adjustment& adjustment) {
+  scrollbar_.set_adjustment(adjustment);
+}
 
 } // namespace dialektos
index 286a299..f94801e 100644 (file)
@@ -33,6 +33,7 @@ public:
   explicit Scrollbar(Gtk::Adjustment& adjustment);
 
   void on_adjustment_changed();
+  void set_adjustment(Gtk::Adjustment& adjustment);
 };
 
 
@@ -44,6 +45,7 @@ public:
   }
   void add(Gtk::Widget&);
   bool on_child_scroll_event(GdkEventScroll*);
+  void set_adjustment(Gtk::Adjustment& adjustment);
 private:
   Scrollbar scrollbar_;
 };
index f666b25..a428975 100644 (file)
@@ -42,8 +42,8 @@ void ThreadWindow::create(std::auto_ptr<bbs_detail::Base> bbs) {
 
 ThreadWindow::ThreadWindow(std::auto_ptr<bbs_detail::Base> bbs) :
   SuperClass(),
-  text_view_(),
-  scrolled_(text_view_.get_adjustment()),
+  text_view_(new text_view::TextView),
+  scrolled_(text_view_->get_adjustment()),
   bbs_(bbs), http_getter_(), idx_() {
 
   // additional menuitems for board window
@@ -68,10 +68,10 @@ ThreadWindow::ThreadWindow(std::auto_ptr<bbs_detail::Base> bbs) :
 
   set_default_size(400,300);
 
-  scrolled_.add(text_view_);
+  scrolled_.add(*text_view_);
   add(scrolled_);
 
-  text_view_.signal_button_press_event().connect_notify(
+  text_view_->signal_button_press_event().connect_notify(
       sigc::mem_fun(*this, &ThreadWindow::on_child_button_press));
 
   show_all();
@@ -85,9 +85,9 @@ bool ThreadWindow::load() {
 
   if (bbs_) {
 
-    bbs_->load_thread(text_view_);
-    text_view_.relayout();
-    text_view_.queue_draw();
+    bbs_->load_thread(*text_view_);
+    text_view_->relayout();
+    text_view_->queue_draw();
 
     std::cout <<
     to_simple_string(microsec_clock::local_time() - start) << std::endl;
@@ -171,9 +171,21 @@ void ThreadWindow::on_http_get_end(bool success) {
   const int code = response.get_status_line().get_code();
   if (code != 200 && code != 206) return;
 
-  bbs_->load_thread_from_string(response.get_content(), text_view_);
-  text_view_.relayout();
-  text_view_.queue_draw();
+  if (code == 200) {
+    // initialize text_view_
+    scrolled_.remove(*text_view_);
+    text_view_.reset(new text_view::TextView);
+    scrolled_.set_adjustment(text_view_->get_adjustment());
+    scrolled_.add(*text_view_);
+
+    text_view_->signal_button_press_event().connect_notify(
+        sigc::mem_fun(*this, &ThreadWindow::on_child_button_press));
+    text_view_->show();
+  }
+
+  bbs_->load_thread_from_string(response.get_content(), *text_view_);
+  text_view_->relayout();
+  text_view_->queue_draw();
 
   save_content(response);
 }
@@ -209,7 +221,7 @@ void ThreadWindow::save_content(const http::Response& response) {
   idx_.last_modified_ = response.get_header().get_last_modified();
   idx_.etag_ = response.get_header().get_etag();
 
-  idx_.line_count_ = text_view_.get_res_num();
+  idx_.line_count_ = text_view_->get_res_num();
 
   idx_.to_xml(boost::filesystem::path(bbs_->get_thread_idx_path()));
 }
index b9e690f..b130642 100644 (file)
@@ -60,7 +60,7 @@ private:
 
   void save_content(const http::Response&);
 
-  text_view::TextView text_view_;
+  boost::scoped_ptr<text_view::TextView> text_view_;
   ScrolledContainer scrolled_;
   boost::scoped_ptr<bbs_detail::Base> bbs_;
   boost::scoped_ptr<http::GetInThread> http_getter_;