📄 projlistgui.c
字号:
/* -*-Mode:C; tab-width:4; indent-tabs-mode:t; c-file-style:"stroustrup";-*- *//* Main code for Project *///#define ERROR_CHECK_LEVEL 2#include <PalmOS.h>#include <DateGlue.h>#include <TxtGlue.h>#include <FntGlue.h>#include <TsmGlue.h>#include <WinGlue.h>#include <TblGlue.h>#include "handera/Vga.h"//#include "SonyCLIE.h"#include "link.h"#include "task.h"#include "xb.h"#include "progectdb.h"#include "progectRsc.h"#include "progect.h"#include "flat.h"#include "btm.h"#include "beam.h"// Palm MODEL support#include "palmMODEL.h"// icon support#include "icon.h"// ToDo export support#include "ToDoDB.h"// Memo linking support#include "MemoDB.h"// address linking support#include "AddressDB.h"// Doc export support#include "doc.h"// Category support#include "category.h"// history support#include "history.h"// hotsync support#include "aftersync.h"#include "projlistGUI.h"#include "projlistMODEL.h"// prototypesvoid ProjectListAdjustScrollRate(void);void ProjectListScroll (WinDirectionType direction, UInt16 units, Boolean byLine);void ProjectListResetScrollRate(void);UInt16 ProjectListGetCurrentSelection(void);void ProjectListNextCategory(void);void ProjectListLoadTable(FormType *frmP);void ProjectListHandleRename(void);// staticsstruct ProjectListGlobals{//UInt16 gCurrentSelection; // current selection in project listchar CategoryName[dmCategoryLength];UInt16 TopVisibleRecord;UInt16 LastSelectedRecord;// These are used for accelerated scrollingUInt16 LastSeconds;UInt16 ScrollUnits;privateRecordViewEnum PrivateRecordVisualStatus;Boolean formClosing;};static struct ProjectListGlobals ProjectList_Globals={"",0,0,0,0};// Scroll rate values#define scrollDelay 2#define scrollAcceleration 2#define scrollSpeedLimit 5// Form Update Codes#define frmUpdateTableCode frmRedrawUpdateCode+1#define frmRedrawTableCode frmUpdateTableCode+1/**************************************************************************** * Name : FrmProjectListInit * Desc : init FrmProjectList * Parm : FormPtr frm * Out : * Auth : lb, 08.08.2000 * Rem : no error handling ***************************************************************************/void FrmProjectListInit(FormPtr frm){ ControlType *popup; Int16 row; Int16 numRows; TablePtr table; // // initialize our model // ProjectListMODELInit(); // handle a weirdness in the GUI ProjectList_Globals.formClosing=false; // // Handle private record status // ProjectList_Globals.PrivateRecordVisualStatus = (privateRecordViewEnum)PrefGetPreference(prefShowPrivateRecords); // // Setup Category List // CategoryGetName (ProjectListMODELGetDBRef(), ProjectListMODELGetCurrentCategory(), ProjectList_Globals.CategoryName); popup = FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, ProjectCategoryPopup)); CategorySetTriggerLabel (popup, ProjectList_Globals.CategoryName); // // setup table // table=(TablePtr) FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,ProjectListTable)); numRows=TblGetNumberOfRows(table); // setup the rows for(row=0;row<numRows;row++) { TblSetItemStyle(table,row,cardIconColumn,customTableItem); TblSetItemStyle(table,row,projectNameColumn,customTableItem); TblSetItemStyle(table,row,noteIconColumn,customTableItem); TblSetRowUsable(table,row,false); } // setup the columns TblSetColumnUsable(table,cardIconColumn,true); TblSetColumnUsable(table,projectNameColumn,true); TblSetColumnUsable(table,noteIconColumn,true); // Set the callback routine that will draw the records. TblSetCustomDrawProcedure (table, cardIconColumn, ProjectListDrawRecord); TblSetCustomDrawProcedure (table, projectNameColumn, ProjectListDrawRecord); TblSetCustomDrawProcedure (table, noteIconColumn, ProjectListDrawRecord); // When starting out, there is nothing previously selected ProjectList_Globals.LastSelectedRecord=noRecord; ProjectListLoadTable(frm);} // void FrmProjectListInit(FormPtr frm)void FrmProjectListCleanUp(void){// DEBUG1("FrmProjectListCLeanup"); // handle a weirdness in the GUI ProjectList_Globals.formClosing=false; // clean up our model ProjectListMODELCleanUp();} // void FrmProjectListCleanUp(void)void SelectCategory (void){ FormType* frmP;// TableType* tblP; UInt16 category; Boolean categoryEdited; // Process the category popup list. category = ProjectListMODELGetCurrentCategory(); frmP = FrmGetActiveForm(); categoryEdited = CategorySelect (ProjectListMODELGetDBRef(), frmP, ProjectCategoryPopup, ProjectCategoryList, true, &category, ProjectList_Globals.CategoryName, 1, categoryDefaultEditCategoryString); if ( categoryEdited || (category != ProjectListMODELGetCurrentCategory())) { ProjectListMODELSetCurrentCategory(category); FrmUpdateForm(FrmProjectList, frmUpdateTableCode);// PrvListClearLookupString(); }}Boolean FrmProjectListHandleEvent (EventPtr e){ Boolean handled = false; FormPtr frm; TableType* tblP; UInt16 currentSelection; ProjectListEntry *record; Char projectName[dmDBNameLength]; Err err; frm = FrmGetActiveForm(); switch (e->eType) { case frmUpdateEvent: switch(e->data.frmUpdate.updateCode) { case frmRedrawUpdateCode: FrmDrawForm(frm); handled = true; break; case frmUpdateTableCode: tblP=(TablePtr) FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,ProjectListTable)); ProjectListLoadTable(frm); // No Break on purpose case frmRedrawTableCode: tblP=(TablePtr) FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,ProjectListTable)); TblRedrawTable(tblP); handled = true; break; default: break; } break; case frmOpenEvent: FrmProjectListInit(frm); FrmDrawForm(frm); handled = true; break; case frmCloseEvent: FrmProjectListCleanUp(); // handled = false break; case menuEvent: MenuEraseStatus(NULL); switch(e->data.menu.itemID) { case MenuMainPreferences: currentSelection=ProjectListGetCurrentSelection(); if (noRecord ==currentSelection) { DEBUG1("Please select a project to open first"); break; } record=ProjectListMODELGetRecord(currentSelection); err=OpenDB(record->cardNumber,record->databaseName,&gdbP); MemPtrUnlock(record); if(errNone == err) { ShowProjectPropertiesDialog(); FrmUpdateForm(FrmProjectList, frmUpdateTableCode); CloseDB(gdbP); } break; case MenuProjectListUpdateList: ProjectListMODELUpdate(); FrmUpdateForm(FrmProjectList, frmUpdateTableCode); break; case MenuProjectListAbout: FrmCustomAlert(ProgectAbout, VERSION, " ", " "); break; case MenuProjectListDuplicate: // if we have a selection currentSelection = ProjectListGetCurrentSelection(); if (noRecord != currentSelection) { record = ProjectListMODELGetRecord(currentSelection); if (Btn_Choose_Name_Ok == ShowChooseNameDialog(record->databaseName,projectName)) { if(DuplicateDB(record->databaseName, projectName)) { FrmCustomAlert(AltAlreadyExists, projectName, NULL, NULL); } FrmUpdateForm(FrmProjectList, frmUpdateTableCode); } MemPtrUnlock(record); } else { DEBUG1("Please select a project to duplicate first"); } handled = true; break; case MenuProjectListBeam: // if we have a selection currentSelection = ProjectListGetCurrentSelection(); if (noRecord != currentSelection) { record = ProjectListMODELGetRecord(currentSelection); SafeCopy(projectName, record->databaseName,dmDBNameLength); MemPtrUnlock(record); Prepend(projectName); // adds "lbPG-" to the DBName... SendDB(CREATOR, projectName, EXTENSION, "DescrDBStore"); } else { DEBUG1("Please select a project to beam first"); } handled = true; break; case MenuProjectListOpen: ProjectListHandleOpen(); handled = true; break; case MenuProjectListNew: ProjectListHandleNew(); handled = true; break; case MenuProjectListDelete: // if we have a selection currentSelection = ProjectListGetCurrentSelection(); if (noRecord != currentSelection) { Char DBName[dmDBNameLength]; record = ProjectListMODELGetRecord(currentSelection); SafeCopy(DBName, record->databaseName,dmDBNameLength); MemPtrUnlock(record); if (FrmCustomAlert(AltConfirmDelete, DBName, " ", " ") == 0) { RemoveDB(DBName); FrmUpdateForm(FrmProjectList, frmUpdateTableCode); } } handled = true; break; case MenuProjectListRename: // if we have a selection ProjectListHandleRename(); handled = true; break; } handled = true; break; case ctlEnterEvent: switch (e->data.ctlEnter.controlID) { case Btn_Scroll_Up: case Btn_Scroll_Down: // Reset scroll rate ProjectListResetScrollRate(); // Clear lookup string// PrvListClearLookupString (); // leave unhandled so the buttons can repeat break; } break; case ctlRepeatEvent: // Adjust the scroll rate if necessary ProjectListAdjustScrollRate(); switch (e->data.ctlRepeat.controlID) { case Btn_Scroll_Up: ProjectListScroll (winUp, ProjectList_Globals.ScrollUnits, false); // leave unhandled so the buttons can repeat break; case Btn_Scroll_Down: ProjectListScroll (winDown, ProjectList_Globals.ScrollUnits, false); // leave unhandled so the buttons can repeat break; default: break; } break; case ctlSelectEvent: switch(e->data.ctlSelect.controlID) { case ProjectCategoryPopup: SelectCategory(); handled = true; break; case Btn_List_New: ProjectListHandleNew(); handled = true; break; case Btn_List_Open: ProjectListHandleOpen(); handled = true; break; case Btn_List_Rename: ProjectListHandleRename(); handled = true; break; default: break; } break; case tblSelectEvent:// // +++ FIX THIS +++ This is not compatible with PalmOS 3.1, and we don't need it yet// if (TblRowMasked(e->data.tblSelect.pTable, e->data.tblSelect.row))// {// if (SecVerifyPW (showPrivateRecords) == true)// {// // We only want to unmask this one record, so restore the preference.// PrefSetPreference (prefShowPrivateRecords, maskPrivateRecords);//// e->data.tblSelect.column = projectNameColumn; //force non-note view// }// else// {// handled=true;// break;// }// } { UInt16 CurrentRecord; CurrentRecord=ProjectListGetCurrentSelection(); // unless note icon, open the database if (e->data.tblSelect.column == noteIconColumn) {// if (NoteViewCreate())// FrmGotoForm (NewNoteView); } else if ( ProjectList_Globals.LastSelectedRecord == CurrentRecord) ProjectListHandleOpen(); ProjectList_Globals.LastSelectedRecord = CurrentRecord; } handled = true; break; case keyDownEvent: // Address Book key pressed for the first time? if (TxtCharIsHardKey(e->data.keyDown.modifiers, e->data.keyDown.chr)) { if (! (e->data.keyDown.modifiers & poweredOnKeyMask)) {// PrvListClearLookupString (); ProjectListNextCategory (); } handled = true; break; } switch (e->data.keyDown.chr) { case vchrPageUp: // Reset scroll rate if not auto repeating if ((e->data.keyDown.modifiers & autoRepeatKeyMask) == 0) { ProjectListResetScrollRate(); } // Adjust the scroll rate if necessary ProjectListAdjustScrollRate(); ProjectListScroll (winUp, ProjectList_Globals.ScrollUnits, false);// PrvListClearLookupString (); handled = true; break; case vchrPageDown: // Reset scroll rate if not auto repeating if ((e->data.keyDown.modifiers & autoRepeatKeyMask) == 0) { ProjectListResetScrollRate(); } // Adjust the scroll rate if necessary ProjectListAdjustScrollRate(); ProjectListScroll (winDown, ProjectList_Globals.ScrollUnits, false);// PrvListClearLookupString (); handled = true; break; case chrUpArrow: case vchrPrevField: // handera support { Int16 rowSel; Int16 colSel; handled = true; tblP=(TablePtr) FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,ProjectListTable)); // if nothing currently selected, start at bottom if (!TblGetSelection(tblP,&rowSel,&colSel)) rowSel=TblGetLastUsableRow(tblP); else { if (--rowSel < 0) { ProjectListScroll (winUp, ProjectList_Globals.ScrollUnits, false); ProjectListLoadTable(frm); rowSel=TblGetLastUsableRow(tblP); } } TblGlueSetSelection(tblP,rowSel,colSel); FrmUpdateForm(FrmProjectList, frmRedrawTableCode); } break; case chrDownArrow: case vchrNextField: // Handera support { Int16 rowSel; Int16 colSel; handled = true; tblP=(TablePtr) FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,ProjectListTable)); // if nothing currently selected, start at bottom if (!TblGetSelection(tblP,&rowSel,&colSel)) rowSel=0; else { if (++rowSel > TblGetLastUsableRow(tblP)) { ProjectListScroll (winDown, ProjectList_Globals.ScrollUnits, false); ProjectListLoadTable(frm); rowSel=0; } } TblGlueSetSelection(tblP,rowSel,colSel); FrmUpdateForm(FrmProjectList, frmRedrawTableCode); } break; case chrCarriageReturn: case chrLineFeed: ProjectListHandleOpen(); handled = true; break; default: // we don't want to deal with anything but normal chars if (TxtGlueCharIsVirtual(e->data.keyDown.modifiers, e->data.keyDown.chr)) break; if (TxtCharIsPrint (e->data.keyDown.chr)) {// // +++ FIX THIS +++ this code causes problems, we pass should the char to ProjectListHandleNew e->data.keyDown.chr = TxtGlueUpperChar(e->data.keyDown.chr); EvtAddEventToQueue(e); ProjectListHandleNew(); handled = true; } break; } break; default: break; } return handled;} // static Boolean FrmProjectListHandleEvent (EventPtr e)//Boolean HandleChooseNameButtonOK(void)UInt16 ShowChooseNameDialog(const Char *srcProjectName,Char destProjectName[dmDBNameLength]){ FormPtr frm; UInt16 hitButton; FieldPtr nameField; Char *tempName; frm=FrmInitForm(FrmChooseName); nameField=GetObjectFromForm(frm,Fld_Project_Name);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -