⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timetextctrl.cpp

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      if (handleDelim) {         bool goToFrac = false;         if (!inFrac && delimStr[delimStr.Length()-1]=='.') {            goToFrac = true;            if (delimStr.Length() > 1)               delimStr = delimStr.BeforeLast('.');         }         if (inFrac) {            if (mFracFields.GetCount() == 0) {               // Should never happen               return;            }            if (handleNum && mFracFields.GetCount() > 1)               mFracFields[mFracFields.GetCount()-2].label = delimStr;            else               mFracFields[mFracFields.GetCount()-1].label = delimStr;         }         else {            if (mWholeFields.GetCount() == 0)               mPrefix = delimStr;            else {               mWholeFields[mWholeFields.GetCount()-1].label = delimStr;            }         }         if (goToFrac)            inFrac = true;         delimStr = wxT("");      }   }   for(i=0; i<mWholeFields.GetCount(); i++)      mWholeFields[i].CreateDigitFormatStr();   for(i=0; i<mFracFields.GetCount(); i++)      mFracFields[i].CreateDigitFormatStr();}void TimeTextCtrl::PrintDebugInfo(){   unsigned int i;   printf("%s", (const char *)mPrefix.mb_str());   for(i=0; i<mWholeFields.GetCount(); i++)      printf("(t / %d) %% %d '%s' ",             mWholeFields[i].base,             mWholeFields[i].range,             (const char *)mWholeFields[i].label.mb_str());   for(i=0; i<mFracFields.GetCount(); i++)      printf("(t * %d) %% %d '%s' ",             mFracFields[i].base,             mFracFields[i].range,             (const char *)mFracFields[i].label.mb_str());   printf("\n");}wxString TimeTextCtrl::GetTimeString(){   int t_int = int(mTimeValue);   double t_frac = (mTimeValue - t_int);   wxString result;   unsigned int i;   result = mPrefix;   for(i=0; i<mWholeFields.GetCount(); i++) {      int value = (t_int / mWholeFields[i].base);      if (mWholeFields[i].range > 0)         value = value % mWholeFields[i].range;      result += wxString::Format(mWholeFields[i].formatStr, value);      result += mWholeFields[i].label;   }   for(i=0; i<mFracFields.GetCount(); i++) {      int value = (int)(t_frac * mFracFields[i].base);      if (mFracFields[i].range > 0)         value = value % mFracFields[i].range;      result += wxString::Format(mFracFields[i].formatStr, value);      result += mFracFields[i].label;   }   return result;}void TimeTextCtrl::DeleteControls(){   unsigned int i;   if (mPrefixStaticText) {      mPrefixStaticText->Destroy();      mPrefixStaticText = NULL;   }   for(i=0; i<mWholeFields.GetCount(); i++) {      mWholeFields[i].textCtrl->Destroy();      mWholeFields[i].staticCtrl->Destroy();   }   for(i=0; i<mFracFields.GetCount(); i++) {      mFracFields[i].textCtrl->Destroy();      mFracFields[i].staticCtrl->Destroy();   }}void TimeTextCtrl::CreateControls(){   wxBoxSizer *mainSizer;   wxTextCtrl *text;   wxStaticText *stat;   unsigned int i;   int width;   int digits;   if (sTextHeight == 0)      ComputeTextExtents();   mainSizer = new wxBoxSizer(wxHORIZONTAL);   if (mPrefix != wxT("")) {      stat = new wxStaticText(this, -1, mPrefix);      mainSizer->Add(stat, 0, wxALL | wxALIGN_CENTER_VERTICAL |                     wxLEFT | wxRIGHT, 1);      mPrefixStaticText = stat;   }   for(i=0; i<mWholeFields.GetCount(); i++) {      digits = mWholeFields[i].digits;      if (digits < 1)         digits = 3;      if (digits > 10)         digits = 10;      width = sTextWidth[digits];      text = new wxTextCtrl(this, AnyTextCtrlID, wxT(""),                            wxDefaultPosition, wxSize(width, -1),                            wxTE_RIGHT);      //if (mWholeFields[i].digits > 0)      //   text->SetMaxLength(mWholeFields[i].digits);      mainSizer->Add(text, 0, wxALL, 0);      mWholeFields[i].textCtrl = text;      stat = new wxStaticText(this, -1, mWholeFields[i].label);      mainSizer->Add(stat, 0, wxALL | wxALIGN_CENTER_VERTICAL |                     wxLEFT | wxRIGHT, 1);      mWholeFields[i].staticCtrl = stat;   }   for(i=0; i<mFracFields.GetCount(); i++) {      digits = mFracFields[i].digits;      if (digits < 1)         digits = 5;      if (digits > 10)         digits = 10;      width = sTextWidth[digits];      text = new wxTextCtrl(this, AnyTextCtrlID, wxT(""),                            wxDefaultPosition, wxSize(width, -1),                            wxTE_RIGHT);      //if (mFracFields[i].digits > 0)      //   text->SetMaxLength(mFracFields[i].digits);      mainSizer->Add(text, 0, wxALL, 0);      mFracFields[i].textCtrl = text;      stat = new wxStaticText(this, -1, mFracFields[i].label);      mainSizer->Add(stat, 0, wxALL | wxALIGN_CENTER_VERTICAL |                     wxLEFT | wxRIGHT, 1);      mFracFields[i].staticCtrl = stat;   }   SetAutoLayout(true);   SetSizer(mainSizer);   mainSizer->Fit(this);   mainSizer->SetSizeHints(this);}void TimeTextCtrl::ValueToControls(){   long sel0, sel1;   double theValue = mTimeValue * mScalingFactor;   int t_int = int(theValue);   double t_frac = (theValue - t_int);   wxString str;   unsigned int i;   mModifyingText = true;   for(i=0; i<mWholeFields.GetCount(); i++) {      int value = (t_int / mWholeFields[i].base);      if (mWholeFields[i].range > 0)         value = value % mWholeFields[i].range;      str.Printf(mWholeFields[i].formatStr, value);      if (mWholeFields[i].str != str) {         mWholeFields[i].str = str;         mWholeFields[i].textCtrl->GetSelection(&sel0, &sel1);         mWholeFields[i].textCtrl->SetValue(str);         mWholeFields[i].textCtrl->SetSelection(sel0, sel1);      }   }   for(i=0; i<mFracFields.GetCount(); i++) {      int value = (int)(t_frac * mFracFields[i].base);      if (mFracFields[i].range > 0)         value = value % mFracFields[i].range;      str.Printf(mFracFields[i].formatStr, value);      if (mFracFields[i].str != str) {         mFracFields[i].str = str;         mFracFields[i].textCtrl->GetSelection(&sel0, &sel1);         mFracFields[i].textCtrl->SetValue(str);         mFracFields[i].textCtrl->SetSelection(sel0, sel1);      }   }   mModifyingText = false;}void TimeTextCtrl::ControlsToValue(){   unsigned int i;   double t = 0.0;   for(i=0; i<mWholeFields.GetCount(); i++) {      long val;      mWholeFields[i].str = mWholeFields[i].textCtrl->GetValue();      mWholeFields[i].str.ToLong(&val);      t += (val * (double)mWholeFields[i].base);   }   for(i=0; i<mFracFields.GetCount(); i++) {      long val;      mFracFields[i].str = mFracFields[i].textCtrl->GetValue();      mFracFields[i].str.ToLong(&val);      t += (val / (double)mFracFields[i].base);   }   t /= mScalingFactor;   mTimeValue = t;}void TimeTextCtrl::OnText(wxCommandEvent &event){   // Don't trigger an event if we were the ones who modified the text   if (mModifyingText) {      return;   }   double oldValue = mTimeValue;   ControlsToValue();   if (oldValue == mTimeValue)      return;   //Create an event for the parent window to process.   wxCommandEvent *e =      new wxCommandEvent(wxEVT_COMMAND_TEXT_UPDATED, GetId());   GetParent()->AddPendingEvent(*e);   delete e;}bool TimeTextCtrl::HasAnyFocus(){   unsigned int i;   wxWindow *focus = FindFocus();   if (focus == this)      return true;   for(i=0; i<mWholeFields.GetCount(); i++)      if (focus == mWholeFields[i].textCtrl)         return true;   for(i=0; i<mFracFields.GetCount(); i++)      if (focus == mFracFields[i].textCtrl)         return true;   return false;}void TimeTextCtrl::ComputeTextExtents(){   // Figure out the font used in text controls, and measure it to   // determine how many pixels wide (and tall) we need to make a   // TextCtrl in order to have room for any number of digits   // from 1 to 10.  Because the text control has a margin and border,   // we need to add some constant pixels to this, which is currently   // a hardcoded number per platform.   #if defined(__WXGTK__)   int xBorder = 2;   int yBorder = 2;   #elif defined(__WXMSW__)   int xBorder = 6;   int yBorder = 2;   #elif defined(__WXMAC__)   int xBorder = 2;   int yBorder = 2;   #else   int xBorder = 2;   int yBorder = 2;   #endif   wxChar str[11];   wxTextCtrl *text;   wxCoord width=0, height=0;   unsigned int i;   text = new wxTextCtrl(this, -1, wxT(""));   wxTextAttr attr = text->GetDefaultStyle();   wxMemoryDC dc;   wxBitmap bitmap(300, 100);   dc.SelectObject(bitmap);   if (attr.HasFont())      dc.SetFont(attr.GetFont());   else      dc.SetFont(text->GetFont());   for(i=0; i<=10; i++) {      str[i] = wxT('0');      str[i+1] = 0;      dc.GetTextExtent(str, &width, &height);      sTextWidth[i] = width + xBorder;      sTextHeight = height + yBorder;   }   text->Destroy();}// Indentation settings for Vim and Emacs.// Please do not modify past this point.//// Local Variables:// c-basic-offset: 3// indent-tabs-mode: nil// End://// vim: et sts=3 sw=3// 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -