void Settings::set_to_gui (Builder &builder, int i) { const char *glade_name = settings[i].glade_name; if (!glade_name) return; switch (settings[i].type) { case T_BOOL: { Gtk::CheckButton *check = NULL; builder->get_widget (glade_name, check); if (!check) std::cerr << "Missing boolean config item " << glade_name << "\n"; else check->set_active (*PTR_BOOL(this, i)); break; } case T_INT: case T_FLOAT: { Gtk::Widget *w = NULL; builder->get_widget (glade_name, w); if (!w) { std::cerr << "Missing user interface item " << glade_name << "\n"; break; } Gtk::SpinButton *spin = dynamic_cast<Gtk::SpinButton *>(w); if (spin) { if (settings[i].type == T_INT) spin->set_value (*PTR_INT(this, i)); else spin->set_value (*PTR_FLOAT(this, i)); break; } Gtk::Range *range = dynamic_cast<Gtk::Range *>(w); if (range) { if (settings[i].type == T_INT) range->set_value (*PTR_INT(this, i)); else range->set_value (*PTR_FLOAT(this, i)); } break; } case T_STRING: { Gtk::Entry *e = NULL; builder->get_widget (glade_name, e); if (!e) { std::cerr << "Missing user interface item " << glade_name << "\n"; break; } e->set_text(*PTR_STRING(this, i)); break; } case T_COLOUR_MEMBER: break; // Ignore, Colour members are special default: std::cerr << "corrupt setting type\n"; break; } }
void Settings::save_settings(Glib::RefPtr<Gio::File> file) { Glib::KeyFile cfg; for (uint i = 0; i < G_N_ELEMENTS (settings); i++) { Glib::ustring group, key; if (!get_group_and_key (i, group, key)) continue; switch (settings[i].type) { case T_BOOL: cfg.set_boolean (group, key, *PTR_BOOL(this, i)); break; case T_INT: cfg.set_integer (group, key, *PTR_INT(this, i)); break; case T_FLOAT: case T_COLOUR_MEMBER: cfg.set_double (group, key, *PTR_FLOAT(this, i)); break; case T_STRING: cfg.set_string (group, key, *PTR_STRING(this, i)); break; default: std::cerr << "Can't save setting of unknown type\n"; break; }; } GCode.m_impl->saveSettings (cfg); Glib::ustring contents = cfg.to_data(); Glib::file_set_contents (file->get_path(), contents); }
void Settings::set_defaults () { for (uint i = 0; i < G_N_ELEMENTS (settings); i++) { switch (settings[i].type) { case T_BOOL: *PTR_BOOL(this, i) = settings[i].def_double != 0.0; break; case T_INT: *PTR_INT(this, i) = settings[i].def_double; break; case T_FLOAT: case T_COLOUR_MEMBER: *PTR_FLOAT(this, i) = settings[i].def_double; break; case T_STRING: *PTR_STRING(this, i) = std::string (settings[i].def_string); break; default: std::cerr << "corrupt setting type\n"; break; } } Slicing.ShrinkQuality = SHRINK_FAST; GCode.m_impl->setDefaults(); // The vectors map each to 3 spin boxes, one per dimension Hardware.Volume = vmml::Vector3f (200,200,140); Hardware.PrintMargin = vmml::Vector3f (10,10,0); }
void Settings::load_settings (Glib::RefPtr<Gio::File> file) { Glib::KeyFile cfg; set_defaults(); try { if (!cfg.load_from_file (file->get_path())) { std::cout << "Failed to load settings from file '" << file->get_path() << "\n"; return; } } catch (const Glib::KeyFileError &err) { std::cout << "Exception " << err.what() << " loading settings from file '" << file->get_path() << "\n"; return; } std::cout << "parsing config from '" << file->get_path() << "\n"; for (uint i = 0; i < G_N_ELEMENTS (settings); i++) { Glib::ustring group, key; if (!get_group_and_key (i, group, key)) continue; if (!cfg.has_key (group, key)) continue; // group & string ... switch (settings[i].type) { case T_BOOL: *PTR_BOOL(this, i) = cfg.get_boolean (group, key); break; case T_INT: *PTR_INT(this, i) = cfg.get_integer (group, key); break; case T_FLOAT: case T_COLOUR_MEMBER: *PTR_FLOAT(this, i) = cfg.get_double (group, key); break; case T_STRING: *PTR_STRING(this, i) = cfg.get_string (group, key); break; default: std::cerr << "corrupt setting type\n"; break; } } GCode.m_impl->loadSettings (cfg); m_signal_visual_settings_changed.emit(); m_signal_update_settings_gui.emit(); }
bool HttpClient::execute(HttpRequest* request,HttpResponse* respone) { //参数检查 PTR_BOOL(request); PTR_BOOL(respone); _request = request; _response = respone; setErrorCode(HTTPERROR_SUCCESS); //连接服务器 const std::string& host = _request->getHost(); int port_number = _request->getPortNumber(); _proxy_socket->setHost(host,port_number); //尝试连接 { const Util::ScopedLock scoped_lock(*_is_valid_lock); if (_is_valid) //判断HttpClient是否还有效 { if (!(_keep_connection && _proxy_socket->isConnected())) { if (!_proxy_socket->connect()) { setErrorCode(HTTPERROR_CONNECT); return false; } } } else { setErrorCode(HTTPERROR_INVALID); return false; } } //进行数据传输 bool execute = false; const std::string& method = _request->getMethod(); //Get方法 if (_strcmpi(method.c_str(),kget) == 0) { execute = httpGet(); } //Post方法 else if (_strcmpi(method.c_str(),kpost) == 0) { execute = httpPost(); } //其他,抛出错误 else { assert(false); } //如果不是长连接 就关闭网络 if (!_keep_connection) { _proxy_socket->close(); } return execute; }
void Settings::get_from_gui (Builder &builder, int i) { const char *glade_name = settings[i].glade_name; if (glade_name == NULL) return; /* Not an automatically connected setting */ switch (settings[i].type) { case T_BOOL: { Gtk::CheckButton *check = NULL; builder->get_widget (glade_name, check); if (!check) std::cerr << "Missing boolean config item " << glade_name << "\n"; else *PTR_BOOL(this, i) = check->get_active(); break; } case T_INT: case T_FLOAT: { Gtk::Widget *w = NULL; builder->get_widget (glade_name, w); if (!w) { std::cerr << "Missing GUI element " << glade_name << "\n"; break; } Gtk::SpinButton *spin = dynamic_cast<Gtk::SpinButton *>(w); if (spin) { if (settings[i].type == T_INT) *PTR_INT(this, i) = spin->get_value(); else *PTR_FLOAT(this, i) = spin->get_value(); break; } Gtk::Range *range = dynamic_cast<Gtk::Range *>(w); if (range) { if (settings[i].type == T_INT) *PTR_INT(this, i) = range->get_value(); else *PTR_FLOAT(this, i) = range->get_value(); } break; } case T_STRING: { Gtk::Entry *e = NULL; builder->get_widget (glade_name, e); if (!e) { std::cerr << "Missing user interface item " << glade_name << "\n"; break; } *PTR_STRING(this, i) = std::string(e->get_text()); break; } case T_COLOUR_MEMBER: // Ignore, colour members are special break; default: std::cerr << "corrupt setting type\n"; break; } if (settings[i].triggers_redraw) m_signal_visual_settings_changed.emit(); }