/* * MathPlanner 3.1 - Mathematical design tool. * Copyright(C) 2002 Jarmo Nikkanen * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. * * You should have received a copy of the GNU General Public License with this program. * */ // ************************************************************************************ // Unit Object // ************************************************************************************ #include "AppControl.h" #include "MathHeaders.h" #include "Header.h" #include "Datasymbol.h" #include "Object_string.h" #include "Function_object.h" #include "Unit.h" #include "Datastore.h" #include "Extern.h" #include #include #include void unit_object::KeyReceived(key_code key) { key.insert_mode=MODE_AUTO; KeyOutput(key); } unit_object::unit_object(DataStorage *msg) :m_base_object(msg) { Reset(); unit=msg->ReadQString("uo:unit"); } DataStorage *unit_object::BuildStorage() { DataStorage *msg=m_base_object::BuildStorage(); msg->AddQString("uo:unit",unit); return(msg); } math_node unit_object::Calculate() { return(math_node(1)); } unit_object::unit_object(ApplicationControl *a,m_function_object *o,string_object *str) :m_base_object(a,o,str) { Reset(); Type=OT_UNIT_OBJECT; Priority=PRIORITY_NONE; SubObject=SUB_NONE; MainType=OMT_DATA; } QFont unit_object::GetFont(int id) { return(string->GetFont(FONT_TYPE_NORMAL)); } QColor unit_object::GetColor(int id) { return(AppControl->GetColor(FONT_TYPE_OPERATOR)); } void unit_object::CalculateBounds() { old_bounds=bounds; QFontMetrics met(GetFont()); bounds.width=met.width(unit); bounds.ascent=met.ascent(); bounds.descent=met.descent(); } void unit_object::MoveTo(QPoint p) { bounds.SetPosition(p); } void unit_object::Draw(QPainter *paint) { QColor co=GetColor(); QFont font=GetFont(); paint->setPen(co); paint->setBrush(co); paint->setFont(font); paint->drawText(bounds.Position(),unit); paint->setBrush(QBrush::NoBrush); if (HasFocus() && function->HasFocus()) { paint->setPen(focus_pen); paint->drawRect(bounds.Rect()); } if (Error_flag && (!HasFocus() || !function->HasFocus())) { paint->setPen(error_pen); paint->drawRect(bounds.Rect()); } } void unit_object::MessageReceived(DataStorage *msg,int rec) { if (rec==TO_OPERATOR) { if (ISMSG(MSG_UNIT)) unit=AppControl->Unit->Display(msg->ReadQString("unit")); } } base_object_message *unit_object::CreateControlObject() { return(new unit_mes(AppControl)); } unit_mes::unit_mes(ApplicationControl *a) :base_object_message(a) { int i; hbox=new QHBox(); combo=new QComboBox(hbox); text=new QLineEdit(hbox); int x=a->Unit->Units(); for (i=0;iinsertItem(a->Unit->UnitName(i)); text->setMinimumWidth(200); connect(combo,SIGNAL(activated(int)),this,SLOT(Combo(int))); //connect(text,SIGNAL(textchanged(int)),this,SLOT(Changed())); } unit_mes::~unit_mes() { } QWidget *unit_mes::MainWidget() { return(hbox); } void unit_mes::Combo(int no) { text->setText(AppControl->Unit->Subs(no)); DataStorage *msg=MESSAGE(MSG_UNIT); msg->AddQString("unit",AppControl->Unit->Subs(no)); PostMessage(msg,TO_OPERATOR); }