/* ------------------------------------------------------------------- * * Module Version : 2.00 * * Author : Andrea Pietsch * * Programming Language : Pure-C * * Copyright : (c) 1994, Andrea Pietsch, 56727 Mayen * * ------------------------------------------------------------------- */ #include #include #include "rsc_3d.h" /* ------------------------------------------------------------------- */ OBJECT *rsc_button; /* Baum-Adresse */ OBJECT *rsc_reiter; /* Baum-Adresse */ OBJECT *rsc_rahmen1; /* Baum-Adresse */ OBJECT *rsc_rahmen2; /* Baum-Adresse */ OBJECT *rsc_boxchar; /* Baum-Adresse */ OBJECT *rsc_text; /* Baum-Adresse */ OBJECT *rsc_frame; /* Baum-Adresse */ OBJECT *rsc_menu; /* Baum-Adresse */ OBJECT *rsc_main; /* Baum-Adresse */ OBJECT *rsc_info; /* Baum-Adresse */ OBJECT *rsc_icon; /* Baum-Adresse */ /* ------------------------------------------------------------------- */ BYTE slider_buffer [20][30]; /* ------------------------------------------------------------------- * HandleDemo * * Erledigt die Verwaltung der "Reiter" und zeigt die verschiedenen * Erweiterten Typen an, die SysGem so drauf hat... * ------------------------------------------------------------------- */ INT HandleObjects ( INT msg, INT button, DIALOG_INFO *inf ) { switch ( msg ) { case SG_START : /* ------------------------------------------ * Voreinstellungen * ------------------------------------------ */ SetText ( rsc_text, TE_EDTEXT, "Ein kleiner Test" ); break; case SG_END : /* ------------------------------------------ * Fenster schliežen * ------------------------------------------ */ switch ( button ) { case -1 : return ( SG_CLOSE ); default : break; } break; case SG_HELP : /* ------------------------------------------ * User hat HELP gedrckt oder auf den HILFE- * Button geklickt * ------------------------------------------ */ Alert ( ALERT_NORM, 1, "[3][ Noch keine Hilfe verfgbar! ][ [OK ]" ); break; case SG_NEWDIAL : /* ------------------------------------------ * Je nachdem, welcher Reiter angew„hlt wurde, * wird hier der richtige Dialog dazu einge- * tragen * ------------------------------------------ */ switch ( button ) { case RE_BUTTON1 : inf->tree = rsc_button; break; case RE_RAHMEN1 : inf->tree = rsc_rahmen1; break; case RE_RAHMEN2 : inf->tree = rsc_rahmen2; break; case RE_BOXCHAR : inf->tree = rsc_boxchar; break; case RE_TEXT : inf->tree = rsc_text; break; case RE_FRAME : inf->tree = rsc_frame; break; default : return ( SG_CONT ); } return ( SG_TAKEDIAL ); default : break; } return ( SG_CONT ); } /* ------------------------------------------------------------------- * HandleMenuLine * * Reagiert auf Clicks in die Menzeile * ------------------------------------------------------------------- */ INT HandleMenuLine ( INT item ) { switch ( item ) { case -1 : /* ----------------------------------------- * User hat die HELP-Taste gedrckt * ----------------------------------------- */ Alert ( ALERT_NORM, 1, "[3][ Noch keine Hilfe verfgbar! ][ [OK ]" ); break; case ME_INFO : /* ----------------------------------------- * Info darstellen * ----------------------------------------- */ DoDialog ( rsc_info, 0, "|Programm-Info" ); break; case ME_ENDE : /* ----------------------------------------- * Programm beenden * ----------------------------------------- */ return ( SG_TERM ); case ME_WECHSELN : /* ----------------------------------------- * Fenster wechseln ohne Auswahl * ----------------------------------------- */ CycleWindow ( FALSE ); break; case ME_WECHSELN2 : /* ----------------------------------------- * Fenster wechseln mit Auswahl * ----------------------------------------- */ CycleWindow ( TRUE ); break; case ME_FONT : /* ----------------------------------------- * Font w„hlen * ----------------------------------------- */ FontSelect ( NULL, NULL, "Zeichensatz", "", FALSE ); break; default : break; } return ( SG_CONT ); } /* ------------------------------------------------------------------- */ INT HandleWindow ( INT msg, WINDOW_INFO *inf ) { LOCAL INT line = -1; switch ( msg ) { case SG_END : /* ----------------------------------------- * Fenster schliežen * ----------------------------------------- */ line = -1; return ( SG_CLOSE ); case SG_LCLICK1 : case SG_LCLICK2 : /* ----------------------------------------- * Zeile selektieren - wenn schon eine Zeile * selektiert ist, deselektieren * ----------------------------------------- */ if ( line != -1 ) { SetLineFlags ( inf->id, line, 0 ); RedrawLine ( inf->id, line ); line = -1; } if ( inf->line >= 0L ) { line = (UINT) inf->line; SetLineFlags ( inf->id, line, 1 ); RedrawLine ( inf->id, line ); } break; } return ( SG_CONT ); } /* ------------------------------------------------------------------- * Normales Textfenster mit 100 Zeilen Text darstellen * * Das Redraw der Textzeilen wird - wie auch das Scrollen - von SysGem * automatisch bernommen * ------------------------------------------------------------------- */ VOID MakeWindow1 ( VOID ) { INT i; BYTE str [100]; /* ----------------------------------------------------------------- * Fenster ”ffnen * ----------------------------------------------------------------- */ if ( OpenWindow ( 'norm', "|Textfenster", "", 0xfef, NULL, 8, TRUE, -1, -1, 1L, 1L, 40, 40, 300, 280, NULL, (RPROC) NULL, HandleWindow ) < 0 ) { return; } /* ----------------------------------------------------------------- * Die Liste aus Textzeilen erzeugen und ins Fenster 'linken'... * ----------------------------------------------------------------- */ BeginListUpdate ( 'norm' ); for ( i = 0; i < 100; i++ ) { sprintf ( str, " Eine kleine Testzeile Nr. %3d zur Demonstration ", i + 1 ); AddToList ( 'norm', str ); } /* ----------------------------------------------------------------- * Textfenster neu berechnen und wenn n”tig, neuzeichnen * ----------------------------------------------------------------- */ EndListUpdate ( 'norm' ); } /* ------------------------------------------------------------------- * Textfenster mit 20 Objektb„umen als Zeilen darstellen * Zum Ausrichten der Zeilen werden zwei Tabulatoren verwendet * * Das Redraw der B„ume wird - wie auch das Scrollen - von SysGem * automatisch bernommen * ------------------------------------------------------------------- */ VOID MakeWindow2 ( VOID ) { INT i; BYTE str [100]; /* ----------------------------------------------------------------- * Fenster ”ffnen, wie oben auch... * ----------------------------------------------------------------- */ if ( OpenWindow ( 'nor2', "|Textfenster", "", NAME | MOVER | CLOSER | UPARROW | DNARROW | VSLIDE, NULL, 8, FALSE, -1, -1, 1L, 1L, 40, 40, 300, 230, NULL, (RPROC) NULL, HandleWindow ) < 0 ) { return; } /* ----------------------------------------------------------------- * Die Liste aus Textzeilen erzeugen und ins Fenster 'linken'... * Ebenso werden die beiden Tabulatoren fr das Fenster eingestellt * ----------------------------------------------------------------- */ BeginListUpdate ( 'nor2' ); SetListTab ( 'nor2', 7, TAB_LEFT ); SetListTab ( 'nor2', 28, TAB_RIGHT ); for ( i = 0; i < 20; i++ ) { sprintf ( str, "\tEine Testzeile Nr.\t%d", i + 1 ); AddToList ( 'nor2', str ); SetLineIcon ( 'nor2', i, rsc_icon, IC_BOX ); } /* ----------------------------------------------------------------- * Textfenster neu berechnen und wenn n”tig, neuzeichnen * ----------------------------------------------------------------- */ EndListUpdate ( 'nor2' ); } /* ------------------------------------------------------------------- */ INT HandleMain ( INT msg, INT button, DIALOG_INFO *inf ) { UINT i; switch ( msg ) { case SG_START : /* ------------------------------------------ * Sliderbox vorbelegen und Textfelder l”schen * ------------------------------------------ */ for ( i = 0; i < 20; i++ ) { sprintf ( slider_buffer [i], "*----+\tTestzeile Nr. %3d", i + 1 ); slider_buffer [i][0] = 255; slider_buffer [i][1] = (BYTE)((LONG)( rsc_icon ) >> 24 ); slider_buffer [i][2] = (BYTE)((LONG)( rsc_icon ) >> 16 ); slider_buffer [i][3] = (BYTE)((LONG)( rsc_icon ) >> 8 ); slider_buffer [i][4] = (BYTE)((LONG)( rsc_icon ) >> 0 ); slider_buffer [i][5] = (BYTE) IC_BAR; } LinkSlider ( rsc_main, MA_UP, MA_DN, MA_SHOW, MA_HIDE, 20, MA_BOX, &slider_buffer [0][0], 30, TRUE ); SetSliderTab ( rsc_main, MA_BOX, 5, TAB_LEFT ); SelectSldItem ( rsc_main, MA_BOX, 0, FALSE ); ClearEditFields ( rsc_main ); break; case SG_SLIDER : /* ------------------------------------------ * Eintrag in der Sliderbox, die angeklickt * wurde, selektieren * ------------------------------------------ */ if ( button >= 0 ) /* War ein 'echter' Eintrag*/ { SelectSldItem ( rsc_main, MA_BOX, button, TRUE ); } break; case SG_END : /* ------------------------------------------ * Button auswerten, der angeklickt wurde * ------------------------------------------ */ switch ( button ) { case -1 : /* Closer angeklickt */ case MA_EXIT : /* --------------------- * Fragen, ob beenden * --------------------- */ if ( Alert ( ALERT_NORM, 1, "[2][ Wirklich beenden? ][ [Ja | [Nein ]" ) == 1 ) { return ( SG_TERM ); } break; case MA_LIST : /* --------------------- * Listbox * --------------------- */ Listbox ( " Dieses | ist | eine | Listbox | in | der | beliebig |" " viele | Zeilen | untergebracht| werden | k”nnen ", -1, -1, rsc_main, MA_LIST ); break; case MA_OBJECT : /* --------------------- * Erweiterte Objekte * darstellen * --------------------- */ MultipleDialog ( 'xobj', -1, -1, "|Objekttypen", "", rsc_reiter, RE_BUTTON1, rsc_button, -2, NULL, HandleObjects ); break; case MA_WINDOW : /* --------------------- * Textfenster zeigen * --------------------- */ MakeWindow1 (); break; case MA_ICONS : /* --------------------- * Iconfenster zeigen * --------------------- */ MakeWindow2 (); break; default : break; } break; case SG_HELP : /* ------------------------------------------ * User hat HELP gedrckt oder auf den HILFE- * Button geklickt * ------------------------------------------ */ Alert ( ALERT_NORM, 1, "[3][ Noch keine Hilfe verfgbar! ][ [OK ]" ); break; case SG_DRAGDROP : /* ------------------------------------------ * Irgendwas wurde ins Fenster gezogen * laden wir's doch einfach mal... * Wenn Fenster schon offen, Fenster schliežen * ------------------------------------------ */ CloseWindowById ( 'file' ); i = (UINT) Display ( inf->dd->data, "|Datei", inf->dd->data, 250, 'file', 30, 30, 300, 250, (APROC) NULL ); /* ------------------------------------------ * Protokollieren, welche Datei geladen wurde * * Wenn Log-Fenster schon offen * ------------------------------------------ */ if ( GetHandle ( 'xlog' ) == -1 ) { OpenLogWindow ( 'xlog', "|Drag & Drop Aktionen", "", 60, 12, 50, 50, (APROC) NULL ); } wprintf ( 'xlog', "\nDatei: %s [%u Zeilen]", inf->dd->data, i ); break; default : break; } return ( SG_CONT ); } /* ------------------------------------------------------------------- */ INT main ( VOID ) { /* ----------------------------------------------------------------- * Initialisieren... * ----------------------------------------------------------------- */ if ( InitGem ( "", 'demo', "Demo" ) > 0 ) { UseWindowSlider (); UseOwnEditFields (); SetKey ( 0L, 0L ); /* ------------------------------------------------------------- * Resource laden - eine normale, da keine Farbicons drin sind * wenn Farbicons, dann C_ICON.PRG in den Auto-Ordner und FALSE * auf TRUE setzen... * ------------------------------------------------------------- */ if ( LoadResource ( "DEMO.RSC", FALSE ) >= 0 ) { /* --------------------------------------------------------- * Dialog-Adressen ermitteln * --------------------------------------------------------- */ rsc_button = RscAdr ( R_TREE, BUTTONS ); rsc_reiter = RscAdr ( R_TREE, REITER ); rsc_rahmen1 = RscAdr ( R_TREE, RAHMEN1 ); rsc_rahmen2 = RscAdr ( R_TREE, RAHMEN2 ); rsc_boxchar = RscAdr ( R_TREE, BOXCHARS ); rsc_text = RscAdr ( R_TREE, TEXTE ); rsc_frame = RscAdr ( R_TREE, FRAME ); rsc_menu = RscAdr ( R_TREE, MENUE ); rsc_main = RscAdr ( R_TREE, MAIN ); rsc_info = RscAdr ( R_TREE, SGINFO ); rsc_icon = RscAdr ( R_TREE, ICONS ); /* --------------------------------------------------------- * Dialoge anmelden * --------------------------------------------------------- */ NewDialog ( rsc_button ); NewDialog ( rsc_reiter ); NewDialog ( rsc_rahmen1 ); NewDialog ( rsc_rahmen2 ); NewDialog ( rsc_boxchar ); NewDialog ( rsc_text ); NewDialog ( rsc_frame ); NewDialog ( rsc_main ); NewDialog ( rsc_info ); NewDialog ( rsc_icon ); /* --------------------------------------------------------- * Menzeile anmelden und darstellen * --------------------------------------------------------- */ InitMenuLine ( rsc_menu ); SetDeskTopMenu ( rsc_menu, HandleMenuLine ); /* --------------------------------------------------------- * Logfenster ”ffnen * --------------------------------------------------------- */ OpenLogWindow ( 'xlog', "|Drag & Drop Aktionen", "", 60, 12, 50, 50, (APROC) NULL ); wprintf ( 'xlog', "Keine geladenen Dateien..." ); /* --------------------------------------------------------- * Hauptdialog ”ffnen * --------------------------------------------------------- */ if ( WindowDialog ( 'main', -1, -1, "|SysGem-Demo", "", TRUE, FALSE, rsc_main, NULL, -2, NULL, HandleMain )) { /* ----------------------------------------------------- * Die Kontrolle an SysGem abgeben... * ----------------------------------------------------- */ HandleSysGem (); } } else { /* --------------------------------------------------------- * Resource-Laden ist schiefgelaufen * --------------------------------------------------------- */ Alert ( ALERT_NORM, 1, "[3][ Resource-Datei nicht gefunden! ][ [Abbruch ]" ); } /* ------------------------------------------------------------- * ...und wieder abmelden * ------------------------------------------------------------- */ ExitGem (); } return ( 0 ); } /* ------------------------------------------------------------------- */