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

📄 sortprefwinc.c

📁 linux下的E_MAIL客户端源码
💻 C
📖 第 1 页 / 共 2 页
字号:
   wlist[0] = thread.atb;   wlist[1] = thread.dtb;   XtManageChildren(wlist, 2);	// threadRadio children   XtManageChild(threadRadio);	// threadSortFrame children   wlist[0] = thread.tb;   wlist[1] = threadSortFrame;   XtManageChildren(wlist, 2);	// threadForm children   XtManageChild(threadForm);	// threadFrame children   XmToggleButtonSetState(thread.tb,  False, False);   XmToggleButtonSetState(thread.atb, True,  False);   XmToggleButtonSetState(thread.dtb, False, False);//// Add buttons for specifying the folders to which this sort is to apply//// folderFrame//    Radio		   folderRadio//       ToggleButton	      folderCurTB//       ToggleButton	      folderSelTB//       ToggleButton	      folderAllTB//       ToggleButton	      folderDefTB//   args.Reset();   args.Orientation(XmVERTICAL);   args.Packing(XmPACK_TIGHT);   Widget folderRadio = XmCreateRadioBox(folderFrame, "folderRadio", ARGS);   folderCurTB = XmCreateToggleButton(folderRadio, "folderCurTB", 0,0);   folderSelTB = XmCreateToggleButton(folderRadio, "folderSelTB", 0,0);   folderAllTB = XmCreateToggleButton(folderRadio, "folderAllTB", 0,0);   folderDefTB = XmCreateToggleButton(folderRadio, "folderDefTB", 0,0);   wlist[0] = folderCurTB;   wlist[1] = folderSelTB;   wlist[2] = folderAllTB;   wlist[3] = folderDefTB;   XtManageChildren(wlist, 4);		// folderRadio children   XtManageChild(folderRadio);		// folderFrame children   wlist[0] = *keyRC;   wlist[1] = threadFrame;   wlist[2] = folderFrame;   XtManageChildren(wlist, 3);	// appForm children   HandleHelp();   XmToggleButtonSetState(folderDefTB, True, True);} // End constructor/*--------------------------------------------------------------- *  Destructor */SortPrefWinC::~SortPrefWinC(){   delete keyRC;}/*--------------------------------------------------------------- *  Display the dialog using the information from the specified sort *     manager. */voidSortPrefWinC::Show(SortMgrC *sortMgr){//// Turn off all keys//   XmToggleButtonSetState(thread.tb,  False, False);   XmToggleButtonSetState(number.tb,  False, False);   XmToggleButtonSetState(status.tb,  False, False);   XmToggleButtonSetState(sender.tb,  False, False);   XmToggleButtonSetState(to.tb,      False, False);   XmToggleButtonSetState(subject.tb, False, False);   XmToggleButtonSetState(date.tb,    False, False);   XmToggleButtonSetState(lines.tb,   False, False);   XmToggleButtonSetState(bytes.tb,   False, False);//// Initialize key states//   SortKeyListC&	keyList = sortMgr->KeyList();   unsigned		count = keyList.size();   for (int i=0; i<count; i++) {      MailSortKeyC	*key = (MailSortKeyC*)keyList[i];      Boolean		ascend = (key->Dir() == SortKeyC::ASCENDING);//// Initialize the state of the toggle buttons//      switch (key->Type()) {	 case (MailSortKeyC::NUMBER):	    XmToggleButtonSetState(number.tb,     True, False);	    XmToggleButtonSetState(number.atb,  ascend, False);	    XmToggleButtonSetState(number.dtb, !ascend, False);	    selectedList.add(number.tb);	    break;	 case (MailSortKeyC::STATUS):	    XmToggleButtonSetState(status.tb,     True, False);	    XmToggleButtonSetState(status.atb,  ascend, False);	    XmToggleButtonSetState(status.dtb, !ascend, False);	    selectedList.add(status.tb);	    break;	 case (MailSortKeyC::SENDER):	    XmToggleButtonSetState(sender.tb,     True, False);	    XmToggleButtonSetState(sender.atb,  ascend, False);	    XmToggleButtonSetState(sender.dtb, !ascend, False);	    selectedList.add(sender.tb);	    break;	 case (MailSortKeyC::TO):	    XmToggleButtonSetState(to.tb,     True, False);	    XmToggleButtonSetState(to.atb,  ascend, False);	    XmToggleButtonSetState(to.dtb, !ascend, False);	    selectedList.add(to.tb);	    break;	 case (MailSortKeyC::SUBJECT):	    XmToggleButtonSetState(subject.tb,     True, False);	    XmToggleButtonSetState(subject.atb,  ascend, False);	    XmToggleButtonSetState(subject.dtb, !ascend, False);	    selectedList.add(subject.tb);	    break;	 case (MailSortKeyC::DATE):	    XmToggleButtonSetState(date.tb,     True, False);	    XmToggleButtonSetState(date.atb,  ascend, False);	    XmToggleButtonSetState(date.dtb, !ascend, False);	    selectedList.add(date.tb);	    break;	 case (MailSortKeyC::LINES):	    XmToggleButtonSetState(lines.tb,     True, False);	    XmToggleButtonSetState(lines.atb,  ascend, False);	    XmToggleButtonSetState(lines.dtb, !ascend, False);	    selectedList.add(lines.tb);	    break;	 case (MailSortKeyC::BYTES):	    XmToggleButtonSetState(bytes.tb,     True, False);	    XmToggleButtonSetState(bytes.atb,  ascend, False);	    XmToggleButtonSetState(bytes.dtb, !ascend, False);	    selectedList.add(bytes.tb);	    break;	 case (MailSortKeyC::THREAD):	    break;      } // End switch sort key type   } // End for each sort key   if ( sortMgr->Threaded() ) {      Boolean		ascend = sortMgr->ThreadDir();      XmToggleButtonSetState(thread.tb,     True, False);      XmToggleButtonSetState(thread.atb,  ascend, False);      XmToggleButtonSetState(thread.dtb, !ascend, False);      selectedList.add(thread.tb);   }   UpdateOrderLabels();//// Initialize how this is to be applied//   if ( sortMgr == ishApp->mainWin->sortMgr )      XmToggleButtonSetState(folderDefTB, True, True);   else      XmToggleButtonSetState(folderCurTB, True, True);   OptWinC::Show();} // End Show/*--------------------------------------------------------------- *  Method to apply settings */BooleanSortPrefWinC::Apply(){   SortPrefC	*prefs = ishApp->sortPrefs;   BusyCursor(True);//// Build the string for this sort//   RegexC	tmp;   StringC	*oldKeys;   StringC	keyStr;   BuildKeyString(keyStr);   ishApp->Broadcast("");   Boolean	sortCurrent = False;//// See if this sort applies to the current folder only//   if ( XmToggleButtonGetState(folderCurTB) ) {      ishApp->mainWin->curFolder->Sort(keyStr);      sortCurrent = True;//// Add this sort to the dictionary//      tmp     = ishApp->mainWin->curFolder->name;      oldKeys = prefs->folderSortKeys.definitionOf(tmp);      if ( oldKeys )	 *oldKeys = keyStr;      else	 prefs->folderSortKeys.add(tmp, keyStr);   }   else if ( XmToggleButtonGetState(folderSelTB) ) {//// Loop through folders//      VItemListC&	slist  = ishApp->mainWin->FolderVBox().SelItems();      if ( slist.size() == 0 ) {	 StringC	errmsg("No folders are selected.");	 PopupMessage(errmsg);	 BusyCursor(False);	 return False;      }      FolderListC&	flist  = ishApp->folderPrefs->OpenFolders();      u_int		fcount = flist.size();      for (int i=0; i<fcount; i++) {	 FolderC	*folder = flist[i];	 if ( slist.includes(folder->icon) ) {	    folder->Sort(keyStr);	    if ( folder == ishApp->mainWin->curFolder ) sortCurrent = True;//// Add this sort to the dictionary//	    tmp = folder->name;	    oldKeys = prefs->folderSortKeys.definitionOf(tmp);	    if ( oldKeys )	       *oldKeys = keyStr;	    else	       prefs->folderSortKeys.add(tmp, keyStr);	 }      }   }   else {      if ( XmToggleButtonGetState(folderAllTB) ) {//// Clear out the folder sort keys//	 prefs->folderSortKeys.removeAll();//// Loop through folders, removing any sort managers//	 FolderListC	*list  = &ishApp->folderPrefs->OpenFolders();	 u_int		count = list->size();	 int	i;	 for (i=0; i<count; i++) {	    FolderC	*folder = (*list)[i];	    folder->SetSortMgr(NULL);	 }	 list  = &ishApp->folderPrefs->FileFolders();	 count = list->size();	 for (i=0; i<count; i++) {	    FolderC	*folder = (*list)[i];	    folder->SetSortMgr(NULL);	 }      } // End if updating all folders//// Update the sort manager for the main window//      ishApp->mainWin->sortMgr->Set(keyStr);      prefs->sortKeys = keyStr;      sortCurrent = True;   }   if ( sortCurrent ) {      ishApp->mainWin->MsgVBox().Sort();      ishApp->mainWin->MsgVBox().Refresh();      if ( keyStr.size() > 0 ) ishApp->Broadcast("Messages sorted");   }//// Write prefs//   prefs->WriteDatabase();   if ( applyAll ) prefs->WriteFile();   BusyCursor(False);   return True;} // End Apply/*--------------------------------------------------------------- *  Method to build the key string for this sort */voidSortPrefWinC::BuildKeyString(StringC& keyStr){   keyStr.Clear();//// Loop through the selected keys//   u_int	count = selectedList.size();   for (int i=0; i<count; i++) {      Widget	tb = *selectedList[i];//// See which key struct this one belongs to//      KeyStruct	*key = NULL;      if      ( tb == thread.tb  ) key = &thread;      else if ( tb == number.tb  ) key = &number;      else if ( tb == status.tb  ) key = &status;      else if ( tb == sender.tb  ) key = &sender;      else if ( tb == to.tb      ) key = &to;      else if ( tb == subject.tb ) key = &subject;      else if ( tb == date.tb    ) key = &date;      else if ( tb == lines.tb   ) key = &lines;      else if ( tb == bytes.tb   ) key = &bytes;      if ( key ) {	 if ( i > 0 ) keyStr += ' ';	 keyStr += key->name;	 if ( XmToggleButtonGetState(key->dtb) ) keyStr += "(D)";	 else					 keyStr += "(A)";      } // End if we have a key struct   } // End for each selected key} // End BuildKeyString/*--------------------------------------------------------------- *  Method to update the labels displaying the order in which the *     sort keys were selected. */voidSortPrefWinC::UpdateOrderLabels(){//// Check each key struct////   UpdateOrderLabel(thread);   UpdateOrderLabel(number);   UpdateOrderLabel(status);   UpdateOrderLabel(sender);   UpdateOrderLabel(to);   UpdateOrderLabel(subject);   UpdateOrderLabel(date);   UpdateOrderLabel(lines);   UpdateOrderLabel(bytes);} // End UpdateOrderLabelsvoidSortPrefWinC::UpdateOrderLabel(KeyStruct key){//// Loop through the selected list until we get to the requested key//    Don't count the thread key//   u_int	count = selectedList.size();   int		index = 1;   StringC	str;   for (int i=0; i<count; i++) {      Widget	tb = *selectedList[i];      if ( tb == key.tb ) {	 str += index;	 i = count;      }      else if ( tb != thread.tb )	 index++;   }   if ( str.size() == 0 ) str = " ";   WXmString	wstr = (char*)str;   XtVaSetValues(key.label, XmNlabelString, (XmString)wstr, NULL);} // End UpdateOrderLabel/*--------------------------------------------------------------- *  Callback routine to handle press of a sort key button */voidSortPrefWinC::ToggleKey(Widget w, SortPrefWinC *This, XmToggleButtonCallbackStruct *tb){//// Add this button to or remove if from the list of selected buttons//   if ( tb->set ) This->selectedList.add(w);   else		  This->selectedList.remove(w);//// Re-number the keys//   This->UpdateOrderLabels();} // End ToggleKey/*--------------------------------------------------------------- *  Callback routines to handle press of a direction toggle button */voidSortPrefWinC::ToggleDir(Widget w, SortPrefWinC *This, XmToggleButtonCallbackStruct *tb){   if ( !tb->set ) return;//// See which key struct this one belongs to//   KeyStruct	*key = NULL;   if      ( w == This->thread.atb  || w == This->thread.dtb )      key = &This->thread;   else if ( w == This->number.atb  || w == This->number.dtb )      key = &This->number;   else if ( w == This->status.atb  || w == This->status.dtb )      key = &This->status;   else if ( w == This->sender.atb  || w == This->sender.dtb )      key = &This->sender;   else if ( w == This->to.atb      || w == This->to.dtb )      key = &This->to;   else if ( w == This->subject.atb || w == This->subject.dtb )      key = &This->subject;   else if ( w == This->date.atb    || w == This->date.dtb )      key = &This->date;   else if ( w == This->lines.atb   || w == This->lines.dtb )      key = &This->lines;   else if ( w == This->bytes.atb   || w == This->bytes.dtb )      key = &This->bytes;   if ( !key ) return;//// Select the key if not already selected//   XmToggleButtonSetState(key->tb, True, True);} // End ToggleDir

⌨️ 快捷键说明

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